HTTPrunner简单教程二

记录学习过程,便以以后好查找
先来明白,各个框架文件夹中对应的文件是干啥用的。
 
1、api文件:存放接口描述文件
格式样例:
name: #登录接口
base_url: ${gain_base_url()}
request:
url: /gk/user/login
headers:
Content-Type: application/json
method: POST
json:
isVisitor: $isVisitor
mobile: $mobile
checkcode: $checkcode

2、testcase文件:存放测试用例步骤,一个test属于一次请求,congfig接口全局定义参数
格式样例:
 
- config:
name: qjp_login_user_post
request:
headers:
Content-Type: application/json
variables:
- tk_type: 0
- test:
name: 登录
request:
url: http://qjptest.51biaoqing.com/gk/user/login
headers:
Content-Type: application/json
Auth-Token: a8f68cf3-67eb-469f-bc61-4ba92152fc97
GK-App-Key: d14269a21ac4c7af9c5a
User-Agent-TK: ACFY9OZ-LelZlDX1eQUXq1ANkorI3ZONsERxanA
User-Agent-Platform: android

method: POST
json:
isVisitor: 0
mobile: 18616578655
checkcode: "8888"
validate:
- eq: [content.code, 200]
setup_hooks:
- ${encryption($request,$tk_type)}
extract:
- token: content.data.token


3、testsuiutes:测试场景构建

4、实践:
方式1:
直接在testcases文件中创建对应yaml文件,后hrunn命令运行

config:
name:xxx(必填) ---测试用例名称,测试报告中的标题
variables: list of dict(非必须) ---定义的全局变量,作用域为整个用例,即当前yml文件
parameter:list of dict (非必须) -----全局参数,用于实现数据化驱动,作用域为整个用例,即当前yml文件
  request:dict (非必须) -----request的公告参数,作用域为整个用例,即当前yml文,常用参数如base_url(参数后,在test中的url可以只描述path),headers
test:
name:xxx(必填) ----测试步骤名称,在测试报告中作为测试步骤的名称
request:dict(必填) ----http请求详细内容(包含url,headers,method,json)
variables:list of dict(非必填) ---测试步骤中定义的变量,作用域于当前步骤
extract:list(非必填) ----提取当前测试步骤响应数据参数并保存到变量中如var,后续测试用例都可以听过$var形式引用
setup_hooks:list(非必填) ----在http请求前执行hook函数,主要用于准备工作
teardown_hooks:list(非必填)----在请求发送后执行hook函数,用户用户测试后的清理工作

直接在文件工程根目录下cmd 命令:hrun testcasess中yml文件的绝对路径,运行完后可以在根目录下的report下查看本次运行报告

样例:
- config:
name: qjp_login_user_post
request:
headers:
Content-Type: application/json
variables:
- tk_type: 0
- test:
name: 登录
request:
url: http://qjptest.51biaoqing.com/gk/user/login
headers:
Content-Type: application/json
Auth-Token: a8f68cf3-67eb-469f-bc61-4ba92152fc97
GK-App-Key: d14269a21ac4c7af9c5a
User-Agent-TK: ACFY9OZ-LelZlDX1eQUXq1ANkorI3ZONsERxanA
User-Agent-Platform: android

method: POST
json:
isVisitor: 0
mobile: 18616578655
checkcode: "8888"
validate:
- eq: [content.code, 200]
setup_hooks:
- ${encryption($request,$tk_type)}
extract:
- token: content.data.token

方式2:
先在api中定义相关接口请求相关接口参数,再在testcases中应用api引用相关接口信息,命令行中运行
hrun testcasess中yml文件的绝对路径,运行完后可以在根目录下的report下查看本次运行报告
api样例——————————————————
name:接口名称
request:
url:xx
headers:
xx:xx
Content-Type: application/json
method:post
json:
xx:xx
xx:"888"
testcases中测试用例————————
与方式1中格式相同,不同的是request部分换成api:对于接口yml路径,注意中api文件request
config:
name:xxx(必填) ---测试用例名称,测试报告中的标题
variables: list of dict(非必须) ---定义的全局变量,作用域为整个用例,即当前yml文件
parameter:list of dict (非必须) -----全局参数,用于实现数据化驱动,作用域为整个用例,即当前yml文件
  request:dict (非必须) -----request的公告参数,作用域为整个用例,即当前yml文,常用参数如base_url(参数后,在test中的url可以只描述path),headers
test:
name:xxx(必填) ----测试步骤名称,在测试报告中作为测试步骤的名称
api:api/xxx.yml ----测试步骤对应接口信息
variables:list of dict(非必填) ---测试步骤中定义的变量,作用域于当前步骤
validate:list (非必填) ----用于断言,来校验接口返回值与预期是否一致
extract:list(非必填) ----提取当前测试步骤响应数据参数并保存到变量中如var,后续测试用例都可以听过$var形式引用
setup_hooks:list(非必填) ----在http请求前执行hook函数,主要用于准备工作
teardown_hooks:list(非必填)----在请求发送后执行hook函数,用户用户测试后的清理工作

方式三:
在testcasuites中运行测试场景case

关于参数化问题:
1、使用csv文件进行参数化
在testcases脚本同级目录下新建csv文件,存入需要的数据,引用时增加一个parameters参数,可通过P{xxx.csv}文件来读取csv文件中的数据,
多个参数使用短横线“-”进行连接,如
parameters:
- goods_id: ${P(xxx.scv)}
脚本执行时,有多个参数会按照交叉取值来运行,不是按行来运行的

2、使用辅助函数来进行参数化
在debugtalk.py文件中,新建一个函数可以在其他地方引用,使用${xxx()}来引用函数,如:
 
 variables: $var


3、config文件中参数化
requests中的base_url和headers,base_url定义后,在test中url只需要填写路径即可,headers属于整个当前yml文件公用,在test中不用再指定
如果在测试步骤中指定headers使用指定的?
样例:
- config:
name: qjp_login_user_post
request:
base_url: http://qjptest.51biaoqing.com
headers:
Content-Type: application/json
Auth-Token: a8f68cf3-67eb-469f-bc61-4ba92152fc97
GK-App-Key: d14269a21ac4c7af9c5a
User-Agent-TK: ACFY9OZ-LelZlDX1eQUXq1ANkorI3ZONsERxanA
User-Agent-Platform: android
variables:
- tk_type: 0
- test:
name: 登录
# api: api/demo_api.yml
request:
url: /gk/user/login
method: POST
json:
isVisitor: 0
mobile: 18616578655
checkcode: "8888"
validate:
- eq: [content.code, 200]
setup_hooks:
- ${encryption($request,$tk_type)}
extract:
- token: content.data.token

疑问:
1、parameter和variables参数有什么区别?
parameter用于数据化驱动?
variables只用户单给变量取值?

2、对于表单参数/上传文件形式post请求,httprunner是如何处理的?
表单参数可以使用params参数来实现
 
3、congfig中定义的rquest请求在test中直接引用就可以了?加载方式是什么,如在config中定义了reques的headers信息,那么在test中如何让引用?
requests中的base_url和headers,base_url定义后,在test中url只需要填写路径即可,headers属于整个当前yml文件公用,在test中不用再指定
如果在测试步骤中指定headers使用指定的?样例如上
4、测试步骤中的定义的参数
在congfig或者test中定义parameter或者variables后,在测试步骤中使用
 
4、在reques中(headers/json)的参数,究竟要不要要双引号?还是直接引用?
直接应用就行了
5、api的yml文件中是否要包含接口返回验证和参数值?如验证返回结果包含token?api文件中,对于参数值直接赋值和引用的意义有什么不同?
6、在api中参数值已经直接赋值和引用的,那么在testcases文件还需要再引用一遍参数值吗?
7、测试步骤用例的定义的变量和参数,在api中是否可以直接引用
可以直接应用的吗,不过作用域不一样每一个是作用域是整个yml文件,一个是当前test生效

遇到问题:
1、httprunner.exceptions.ParamsError: base url missed!
config中request和base_url和headers格式错误,
request/base_url/headers 应该是同级关系,不是次级关系,这里强调的是参数值,所以不是request方式的格式
 
原文地址:https://www.cnblogs.com/YouxiYouxi/p/12736828.html