1、背景
對于大數(shù)據(jù)相關(guān)項(xiàng)目的測試,往往需要大量的測試數(shù)據(jù),而場內(nèi)測試時(shí)很難獲取那么大批量的真實(shí)數(shù)據(jù),這個(gè)時(shí)候需要測試人員能夠快速模擬出符合要求的測試數(shù)據(jù)。這個(gè)時(shí)候要是有一個(gè)自動(dòng)化工具或測試腳本簡直不要太爽~
2、問題引入
對于互聯(lián)網(wǎng)大數(shù)據(jù)測試,當(dāng)需要快速模擬以萬為單位的用戶數(shù)據(jù)(包括用戶名、ip地址、主機(jī)名、訪問url等)時(shí),有什么方法可以推薦嗎?
這個(gè)時(shí)候你一定要試試Python的fake庫,簡單方便,用了的都說好!
3、功能介紹
fake庫可以模擬哪些信息?模擬信息主要包括:人物、地址、公司信息、文件信息、互聯(lián)網(wǎng)信息等,官方地址詳見:https://faker.readthedocs.io/en/master/#。

4、案例講解
1)接口測試——模擬接口傳入?yún)?shù)
接口測試是幾乎是每個(gè)測試人員測試生涯中的必經(jīng)之路。對于接口測試,往往我們需要根據(jù)定義傳入相應(yīng)的參數(shù)值驗(yàn)證接口返回的正確性。
例如:某個(gè)接口需要傳入int型變量,上下限分別是0、100。
寫接口自動(dòng)化測試的時(shí)候我們往往是使用等價(jià)類和邊界值測試法選擇幾個(gè)測試數(shù)據(jù),例如:0、100、-1、101、50進(jìn)行測試,但畢竟測試數(shù)據(jù)覆蓋不夠全面。
對于這類需要豐富測試數(shù)據(jù)的需求,我們可以使用fake的Python數(shù)據(jù)功能,隨機(jī)生成int數(shù)(fake.pyint())、生成float數(shù)(fake.pyfloat(left_digits=None, right_digits=None, positive=False))等。
業(yè)務(wù)測試——大數(shù)據(jù)用戶信息模擬
對于某些項(xiàng)目,需要模擬用戶信息進(jìn)行業(yè)務(wù)測試(例如:核酸監(jiān)測系統(tǒng),并發(fā)測試大量用戶的信息采集)。
假如我們需要生成一萬個(gè)用戶,包括:用戶名、聯(lián)系電話、電子郵箱、出生年月日、所在城市、公司和身份證號碼等信息。使用fake庫,該如何模擬呢?
數(shù)據(jù)簡單代碼示例如下圖所示:

運(yùn)行結(jié)果,模擬用戶如下圖所示:

2)安全測試——互聯(lián)網(wǎng)訪問信息模擬
對于某些互聯(lián)網(wǎng)訪問安全類項(xiàng)目,往往需要模擬用戶互聯(lián)網(wǎng)訪問信息,從信息中判定用戶是否有危險(xiǎn)行為。
比如:某公司的安全檢測系統(tǒng),需要從員工的互聯(lián)網(wǎng)訪問信息(包括:員工機(jī)器host_name,訪問機(jī)器的源ip,訪問網(wǎng)站url,訪問網(wǎng)站ip等)監(jiān)測員工是否訪問危險(xiǎn)網(wǎng)站或危險(xiǎn)IP。
那么,測試該系統(tǒng),無法獲取真實(shí)用戶訪問信息時(shí),如何使用fake庫模擬測試數(shù)據(jù)進(jìn)行被測系統(tǒng)的業(yè)務(wù)測試呢?
數(shù)據(jù)模擬簡單代碼示例如下圖所示:
5、Q&A
1)為何上述樣例中生成的用戶名、地址等信息是中文,如何產(chǎn)生英文信息?
模擬中文信息,在初始化fake庫時(shí),使用Faker(locale='zh_CN')即可,默認(rèn)Faker()初始化時(shí),產(chǎn)生的用戶信息時(shí)英文。
當(dāng)然,我們還可以使用其他語言(比如日文)產(chǎn)生相應(yīng)信息,初始化時(shí)使用Faker(local=’ja_JP’);。
2)如何自定義產(chǎn)生一些自己定制化的信息,比如使用自定義的單詞生成文本?
可以使用ext_word_list參數(shù)。例如:
