基于文档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
- ""
- 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
- ""
- eq:
- content.body.param.name
- $name

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
- ""
- 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
- ""
- eq:
- content.body.param.userName
- $userName

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
- ""
- eq:
- content.body.param.userName
- $userName

场景四、用例+关联参数+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)}
 
												

HTTPRunner实践二——数据驱动的更多相关文章

  1. HTTPRunner实践二——参数化之生成UUID

    接口测试中,需要使用到UUID,用来生成唯一ID. 1.什么是UUID UUID是128位的全局唯一标识符,通常由32字节的字符串表示.它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID ...

  2. ASP.NET MVC5 网站开发实践(二) Member区域–管理列表、回复及删除

    本来想接着上次把这篇写完的,没想到后来工作的一些事落下了,放假了赶紧补上. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目框架 ASP ...

  3. ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询

    上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...

  4. ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构

    咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...

  5. ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章

    上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据.   目录: ASP.N ...

  6. ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表

    显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据   目录 ASP.N ...

  7. ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

    上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...

  8. ASP.NET MVC5 网站开发实践(二) Member区域 - 文章管理架构

    上次把member的用户部分完成,现在开始做文章管理部分.文章部分根据涉及显示现实文章列表,发布文章,修改文章,删除文章等功能.最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示 ...

  9. ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(3)修改资料、修改密码

    在上一篇博客中实现了用户的注销和登录,其实代码里落了点东西,就是用户登录要更新最后一次登录时间和登录IP,这次补上.今天做修改资料和修改密码,TryUpdateModel是新用到的东西. 目录: AS ...

随机推荐

  1. Android Weekly Notes Issue #316

    July 1st, 2018 Android Weekly Issue #316 本期内容包含教你使用Kotlin通过Annotation Processor生成代码文件, JetPack中的Andr ...

  2. 简单通俗解释内外网IP与端口映射

    IP:分为外网IP和内网IP 也就是我们说的外网IP属于实体IP 实体IP,它是独一无二的,在网络的世界里,每一部计算机的都有他的位置,一个 IP 就好似一个门牌!例如,你要去百度的网站的话,就要去『 ...

  3. Quartz.Net初探

    想必大家在工作中经常会遇到这样类似的需求,在某个时间或者需要不间断的执行某个业务动作去满足任务需求.例如,我们写了一个job,定时去处理一些任务,在没有了解到Quartz.Net之前,我是这样做的,进 ...

  4. EVC入门之二: 在未被加载的DLL中设置断点 (虽然没有遇到这个问题,不过先摘抄下来)

    问题: 这个问题居然也郁闷了我一段时间. 我们假设在EVC里建立了一个project, 里面有SubProject_1(以下简称SB1,嘿嘿), 编译生成一个EXE; SubProject_2(以下简 ...

  5. 0.5px的实现的几种方法

    方法一 通过css3缩放 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  6. CodeForces -163E :e-Government (AC自动机+DFS序+树状数组)

    The best programmers of Embezzland compete to develop a part of the project called "e-Governmen ...

  7. POJ3468 A Simple Problem with Integers(数状数组||区间修改的RMQ问题)

    You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...

  8. ACM学习历程——UVA127 "Accordian" Patience(栈, 链表)

    Description  ``Accordian'' Patience  You are to simulate the playing of games of ``Accordian'' patie ...

  9. The specified named connection is either not found in the configuration, not intended to be used

    今天用EF遇到一个问题, The specified named connection is either not found in the configuration, not intended t ...

  10. Jmeter提取响应数据的结果保存到本地的一个文件

    原文地址: https://www.cnblogs.com/whitewasher/p/9504728.html 当做性能压测时,可能会需要把响应数据的一些字段统计出来.这里简单介绍一下. 1.首先把 ...