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
- ""
- 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实践二——数据驱动的更多相关文章
- HTTPRunner实践二——参数化之生成UUID
接口测试中,需要使用到UUID,用来生成唯一ID. 1.什么是UUID UUID是128位的全局唯一标识符,通常由32字节的字符串表示.它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID ...
- ASP.NET MVC5 网站开发实践(二) Member区域–管理列表、回复及删除
本来想接着上次把这篇写完的,没想到后来工作的一些事落下了,放假了赶紧补上. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目框架 ASP ...
- ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询
上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构
咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章
上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据. 目录: ASP.N ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表
显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据 目录 ASP.N ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章
上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 文章管理架构
上次把member的用户部分完成,现在开始做文章管理部分.文章部分根据涉及显示现实文章列表,发布文章,修改文章,删除文章等功能.最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示 ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(3)修改资料、修改密码
在上一篇博客中实现了用户的注销和登录,其实代码里落了点东西,就是用户登录要更新最后一次登录时间和登录IP,这次补上.今天做修改资料和修改密码,TryUpdateModel是新用到的东西. 目录: AS ...
随机推荐
- [2018-08-25]模板引擎Razor Engine 用法示例
好久没写博客了,回宁波后最近几个月一直忙些线下的事情. 敲代码方面脱产有阵子了,生疏了,回头一看,这行业果然更新飞快. 最近线下的事情基本忙完,准备开始干回老本行,最重要的一件事就是升级abplus库 ...
- ZOJ - 1504 Slots of Fun 【数学】
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1504 题意 给出一串字符串 里面的每个字符的位置 都按照题目的意 ...
- CMake最好的学习资料
本文为转载,阅读不友好,请先查看原文:https://blog.gmem.cc/cmake-study-note 收下为原文内容================> 基础知识 CMake简介 CM ...
- springboot简单介绍
1.springboot简单介绍 微服务架构 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程. 该框架使用了特定的方 ...
- Protothread 机制
一.概述 很多传感器操作系统都是基于事件驱动模型的,事件驱动模型不用为每个进程都分配一个进程栈,这对内存资源受限的无线传感器网络嵌入式系统尤为重要. 然而事件驱动模型不支持阻塞等待抽象语句,因此程序员 ...
- js/jq 动态添加的元素不能触发绑定事件解决方案
<!-- Copyright 2017-10-27, Jachin QQ: 381558301 Email: 381558301@qq.com 请看看你们的版本并对号入座: jquery1.6版 ...
- Mac系统存储-其他存储无故增大
解决办法:打开Finder:安全倾倒废纸篓就会减少很大一部分存储.
- BZOJ 1673 [Usaco2005 Dec]Scales 天平:dfs 启发式搜索 A*搜索
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1673 题意: 有n个砝码(n <= 1000),重量为w[i]. 你要从中选择一些砝 ...
- 机器学习 Regularization and model selection
Regularization and model selection 假设我们为了一个学习问题尝试从几个模型中选择一个合适的模型.例如,我们可能用一个多项式回归模型hθ(x)=g(θ0+θ1x+θ2x ...
- BrowserSync(省时的浏览器同步测试工具)
第一步:安装node 第二步:安装BrowserSync npm install -g browser-sync 第三部:启动BrowserSync 假如我在D盘建立一个文件test,里面分别包括in ...