最全,HttpRunner接口自动化测试—数据驱动实战,进阶高级测试


前言

C1

场景一:用例集+独立参数+参数列表

原始用例文件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

分析:
需要参数化的数据,患者姓名name。

步骤:
在config模块中,将需要参数化的数据name,配置为全局参数,并使用列表赋值。

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

在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"}}'

断言中如有需要验证name的地方,也进行替换

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

全部代码实例:

-   config:
        name: 患者管理-新增患者
        request:
            base_url: 'http://192.168.14.76:8080'
            headers:
                User-Agent: null
        variables: []
        parameters:
        - name: ["杜甫", "曹雪芹", "施耐庵"]
-   test:
        name: /myinfo/pinyin4j/converterToFirstSpell
        request:
            method: GET
            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
        validate:
        -   eq:
            - status_code
            - 200
        -   eq:
            - content.body.code
            - "0000"
        -   eq:
            - content.body.param.name
            - $name

场景二、用例集+关联参数+参数列表

找到需要参数化的信息
姓名-缩写-出生日期-性别

config中配置参数

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

替换参数

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

完整代码

-   config:
        name: 患者管理-新增患者
        parameters:
            - userName-userShortName-birthday-sex:
                - ["李白","LB","1988-09-09",1]
                - ["白居易","BJY","1978-05-09",1]
                - ["杜牧","DM","1998-03-09",1]
        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

场景三、用例集+关联参数+CSV文件

特别注意:
对于 CSV 数据文件,需要遵循如下几项约定的规则:

文件需放置在与测试用例文件相同的目录中;
CSV 文件中的第一行必须为参数名称,从第二行开始为参数值,每个(组)值占一行;
若同一个 CSV 文件中具有多个参数,则参数名称和数值的间隔符需实用英文逗号。
文件中如何含有中文,需要保存为UTF-8格式

步骤:
新建CSV文件,命名为patientInfo.csv,编码方式UTF-8

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

在config模块中,配置参数

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

在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

完整代码实例

-   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

场景四、用例+关联参数+CSV文件

将场景三中,config中的参数配置,移到到test模块即可

C2

场景五、用例集+关联参数+自定义函数生成列表

特别注意:需要注意的是,在自定义函数中,生成的参数列表必须为 list of dict 的数据结构,该设计主要是为了与 CSV 文件的处理机制保持一致。

在 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)}
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只有心中坚定的梦想,才能让我们在前行的路途中永不疲惫。在人生的旅途中,莫忘初心,莫放弃梦想,唯有持之以恒,不断追赶,才能走出人生辉煌的精彩一生。

不放弃,不言败,只有不停地拼搏奋斗,才能使梦想成真。即使路途再远再艰辛,也要坚持追逐,因为坚持不懈的付出,才是最终成就的关键,让奋斗的光芒照亮前行的道路。

不管前方多么艰难,不管环境多么恶劣,只要我们内心燃起希望的火焰,愿意坚持奋斗,就能超越困境,创造属于自己的辉煌。相信自己的力量,勇往直前,未来将会因你的付出而变得更加美好。

猜你喜欢

转载自blog.csdn.net/x2waiwai/article/details/131724950