HTTPRunner實踐二——數據驅動


基於文檔http://cn.httprunner.org/advanced/data-driven/

場景一:用例集+獨立參數+參數列表

1、原始用例文件savePatient_01.yml

-   config:
        name: 患者管理-新增患者
        request:
            base_url: 'http://192.168.14.76:8080'
            headers:
                User-Agent: null
        variables: []
-   test:
        name: /myinfo/pinyin4j/converterToFirstSpell
        request:
            method: GET
            params:
                detail: '{"body":{"synCode":"","content":{},"param":{"name":"施耐庵"},"code":{}},"header":{"v":"v_pc_1.0.3.24","doctorMainId":"ff80808162bc9a2f0162f1c2322627ab","clinicId":"8a9a9c745f9b87c3015fdcc1e36b4271","type":"4","imei":"661D-6DF1-B196-3DFE-DE7D-3A01-3AA1-471F","userToken":"20180803105231387f8ueqor"}}'
            url: http://192.168.14.76:8080/myinfo/pinyin4j/converterToFirstSpell
        validate:
        -   eq:
            - status_code
            - 200
        -   eq:
            - headers.Content-Type
            - text/html;charset=UTF-8

2、分析

需要參數化的數據,患者姓名name,如上紅色加粗部分。

步驟

1、在config模塊中,將需要參數化的數據name,配置為全局參數,並使用列表賦值。

parameters:
- name: ["杜甫", "曹雪芹", "施耐庵"]

2、在test請求中引用name的地方,使用參數替換${name}

params:
                detail: '{"body":{"synCode":"","content":{},"param":{"name":"$name"},"code":{}},"header":{"v":"v_pc_1.0.3.24","doctorMainId":"ff80808162bc9a2f0162f1c2322627ab","clinicId":"8a9a9c745f9b87c3015fdcc1e36b4271","type":"4","imei":"661D-6DF1-B196-3DFE-DE7D-3A01-3AA1-471F","userToken":"20180803105231387f8ueqor"}}'
            url: http://192.168.14.76:8080/myinfo/pinyin4j/converterToFirstSpell

3、斷言中如有需要驗證name的地方,也進行替換

validate:
        -   eq:
            - status_code
            - 200
        -   eq:
            - content.body.code
            - "0000"
        -   eq:
            - content.body.param.name
            - $name

全部代碼實例:

 1 -   config:
 2         name: 患者管理-新增患者
 3         request:
 4             base_url: 'http://192.168.14.76:8080'
 5             headers:
 6                 User-Agent: null
 7         variables: []
 8         parameters:
 9         - name: ["杜甫", "曹雪芹", "施耐庵"]
10 -   test:
11         name: /myinfo/pinyin4j/converterToFirstSpell
12         request:
13             method: GET
14             params:
15                 detail: '{"body":{"synCode":"","content":{},"param":{"name":"$name"},"code":{}},"header":{"v":"v_pc_1.0.3.24","doctorMainId":"ff80808162bc9a2f0162f1c2322627ab","clinicId":"8a9a9c745f9b87c3015fdcc1e36b4271","type":"4","imei":"661D-6DF1-B196-3DFE-DE7D-3A01-3AA1-471F","userToken":"20180803105231387f8ueqor"}}'
16             url: http://192.168.14.76:8080/myinfo/pinyin4j/converterToFirstSpell
17         validate:
18         -   eq:
19             - status_code
20             - 200
21         -   eq:
22             - content.body.code
23             - "0000"
24         -   eq:
25             - content.body.param.name
26             - $name
View Code

4、運行代碼,查看結果

場景二、用例集+關聯參數+參數列表

1、找到需要參數化的信息

姓名-縮寫-出生日期-性別

2、config中配置參數

parameters:
            - userName-userShortName-birthday-sex:
                - ["李白","LB","1988-09-09",1]
                - ["白居易","BJY","1978-05-09",1]
                - ["杜牧","DM","1998-03-09",1]

3、替換參數

request:
            method: GET
            params:
                detail: '{"body":{"synCode":"","content":{},"param":{"id":"9cc01ecefb784f03bfcc5a87c3ad6a71","userName":"$userName","userShortName":"$userShortName","birthday":"$birthday","sex":$sex,"phone":"18911572511","isDelete":0,"illHistory":"","allergicHistory":"","address":"","homeAddress":"","base_version":"","totalArrears":"0","clinicId":"","doctorId":"","idCardNo":"","agency":"","folk":"","validitytime":"","fingerPrint":"0","deviceType":"0","diagnose":"","patientSource":""},"code":{}},"header":{"v":"v_pc_1.0.3.24","doctorMainId":"ff80808162bc9a2f0162f1c2322627ab","clinicId":"8a9a9c745f9b87c3015fdcc1e36b4271","type":"4","imei":"661D-6DF1-B196-3DFE-DE7D-3A01-3AA1-471F","userToken":"20180803105231387f8ueqor"}}'
            url: http://192.168.14.76:8080/patient/clinicPatient/savePatientFromPad

 

4、優化斷言

        validate:
        -   eq:
            - status_code
            - 200
        -   eq:
            - content.body.code
            - "0000"
        -   eq:
            - content.body.param.userName
            - $userName

完整代碼

 1 -   config:
 2         name: 患者管理-新增患者
 3         parameters:
 4             - userName-userShortName-birthday-sex:
 5                 - ["李白","LB","1988-09-09",1]
 6                 - ["白居易","BJY","1978-05-09",1]
 7                 - ["杜牧","DM","1998-03-09",1]
 8         request:
 9             base_url: 'http://192.168.14.76:8080'
10             headers:
11                 User-Agent: null
12         variables: []
13 
14 
15 -   test:
16         name: /patient/clinicPatient/savePatientFromPad
17         request:
18             method: GET
19             params:
20                 detail: '{"body":{"synCode":"","content":{},"param":{"id":"9cc01ecefb784f03bfcc5a87c3ad6a71","userName":"$userName","userShortName":"$userShortName","birthday":"$birthday","sex":$sex,"phone":"18911572511","isDelete":0,"illHistory":"","allergicHistory":"","address":"","homeAddress":"","base_version":"","totalArrears":"0","clinicId":"","doctorId":"","idCardNo":"","agency":"","folk":"","validitytime":"","fingerPrint":"0","deviceType":"0","diagnose":"","patientSource":""},"code":{}},"header":{"v":"v_pc_1.0.3.24","doctorMainId":"ff80808162bc9a2f0162f1c2322627ab","clinicId":"8a9a9c745f9b87c3015fdcc1e36b4271","type":"4","imei":"661D-6DF1-B196-3DFE-DE7D-3A01-3AA1-471F","userToken":"20180803105231387f8ueqor"}}'
21             url: http://192.168.14.76:8080/patient/clinicPatient/savePatientFromPad
22         validate:
23         -   eq:
24             - status_code
25             - 200
26         -   eq:
27             - content.body.code
28             - "0000"
29         -   eq:
30             - content.body.param.userName
31             - $userName
View Code

 

5、運行查看結果

場景三、用例集+關聯參數+CSV文件

1、特別注意:

對於 CSV 數據文件,需要遵循如下幾項約定的規則:

  • 文件需放置在與測試用例文件相同的目錄中;
  • CSV 文件中的第一行必須為參數名稱,從第二行開始為參數值,每個(組)值占一行;
  • 若同一個 CSV 文件中具有多個參數,則參數名稱和數值的間隔符需實用英文逗號。
  • 文件中如何含有中文,需要保存為UTF-8格式

2、步驟

1)新建CSV文件,命名為patientInfo.csv,編碼方式UTF-8

userName,userShortName,birthday,sex
莫言,MY,2011-01-09,1
吳佩慈,WPC,1996-09-08,2

2) 在config模塊中,配置參數

parameters:
            - userName-userShortName-birthday-sex: ${P(patientInfo.csv)}

3)在test模塊中,替換參數

request:
            method: GET
            params:
                detail: '{"body":{"synCode":"","content":{},"param":{"id":"9cc01ecefb784f03bfcc5a87c3ad6a71","userName":"$userName","userShortName":"$userShortName","birthday":"$birthday","sex":$sex,"phone":"18911572511","isDelete":0,"illHistory":"","allergicHistory":"","address":"","homeAddress":"","base_version":"","totalArrears":"0","clinicId":"","doctorId":"","idCardNo":"","agency":"","folk":"","validitytime":"","fingerPrint":"0","deviceType":"0","diagnose":"","patientSource":""},"code":{}},"header":{"v":"v_pc_1.0.3.24","doctorMainId":"ff80808162bc9a2f0162f1c2322627ab","clinicId":"8a9a9c745f9b87c3015fdcc1e36b4271","type":"4","imei":"661D-6DF1-B196-3DFE-DE7D-3A01-3AA1-471F","userToken":"20180803105231387f8ueqor"}}'
            url: http://192.168.14.76:8080/patient/clinicPatient/savePatientFromPad

4)運行代碼,查看結果

完整代碼實例

-   config:
        name: 患者管理-新增患者
        parameters:
            - userName-userShortName-birthday-sex: ${P(patientInfo.csv)}

        request:
            base_url: 'http://192.168.14.76:8080'
            headers:
                User-Agent: null
        variables: []


-   test:
        name: /patient/clinicPatient/savePatientFromPad
        request:
            method: GET
            params:
                detail: '{"body":{"synCode":"","content":{},"param":{"id":"9cc01ecefb784f03bfcc5a87c3ad6a71","userName":"$userName","userShortName":"$userShortName","birthday":"$birthday","sex":$sex,"phone":"18911572511","isDelete":0,"illHistory":"","allergicHistory":"","address":"","homeAddress":"","base_version":"","totalArrears":"0","clinicId":"","doctorId":"","idCardNo":"","agency":"","folk":"","validitytime":"","fingerPrint":"0","deviceType":"0","diagnose":"","patientSource":""},"code":{}},"header":{"v":"v_pc_1.0.3.24","doctorMainId":"ff80808162bc9a2f0162f1c2322627ab","clinicId":"8a9a9c745f9b87c3015fdcc1e36b4271","type":"4","imei":"661D-6DF1-B196-3DFE-DE7D-3A01-3AA1-471F","userToken":"20180803105231387f8ueqor"}}'
            url: http://192.168.14.76:8080/patient/clinicPatient/savePatientFromPad
        validate:
        -   eq:
            - status_code
            - 200
        -   eq:
            - content.body.code
            - "0000"
        -   eq:
            - content.body.param.userName
            - $userName
View Code

場景四、用例+關聯參數+CSV文件

將場景三中,config中的參數配置,移到到test模塊即可

場景五、用例集+關聯參數+自定義函數生成列表

特別注意:需要注意的是,在自定義函數中,生成的參數列表必須為 list of dict 的數據結構,該設計主要是為了與 CSV 文件的處理機制保持一致。

1、在 debugtalk.py 中定義函數 get_patient_info,可生成指定數量的參數列表。

def get_patient_info(num):
    patients = []
    for index in range(1, num+1):
        patients.append(
            {"userName": gen_random_name(), "sex": gen_random_sex(),"birthday":gen_random_date()},
        )

    return patients

其中:gen_random_name()、gen_random_sex()、gen_random_date()是上面定義的方法

那么在 YAML/JSON 的 parameters 中就可以調用自定義函數生成指定數量的參數列表。

        parameters:
            - userName-sex-birthday-sex: ${get_patient_info(3)}

 

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM