小编是在去年开始了解并使用httprunner进行接口自动化测试,httprunner是一个开源框架,使用yaml、json文件编写测试用例,进行接口测试。
今年Httprunner已经更新至2.X版本,这次更新进行了很大的变动,因为团队年初决定做自己的接口自动化框架,小编也没有再继续进行学习使用了,再此对于Httprunner 1.X版本进行一次分享(1.X版本仍可使用,2.X版本对于层次理念上进行了大的调整,但是看官方文档对于基础的使用还是没有变化的,可以作为2.X版本使用的一个了解)
Httprunner对于requests模块、locust模块进行了良好的封装使用,但是因此个人也觉得受到了很多限制,这也是团队决定做自己的接口测试框架的原因
官方文档 https://cn.httprunner.org/
pip3 install httprunner==1.5.15
easy_install httprunner
hrun -V
har2case -V
使用pip安装
pip3 install locustio
因为Httprunner的是使用python编写的,所以就安装了编辑器(大家可以根据自己的喜好安装编辑器)
tar xvfz pycharm-community-2017.3.2.tgz
cd xxxxx安装目录/bin;
./pycharm.sh
sudo apt-get install git 安装git用于克隆汉化包
git clone https://github.com/ewen0930/PyCharm-Chinese 克隆汉化包
cd xxxx(具体的下载目录)/PyCharm-Chinese
bash package.cmd 设置bash环境
sudo cp resources_zh.jar xxxxxx(pycharm具体安装的目录)/lib 之后重启pycharm
hrun --startproject apitest(实际的项目名称)
注意修改脚手架生成的时testsuite为suite
* api层(httprunner的基本层次):放置所有的api,并将其参数化。根据不同的项目-模块分层保存
* 数据层:所有需要访问业务数据库的方法文件
* 报告层(httprunner的基本层次):测试报告存放位置
* 方法层:httprunner的所有方法需要在根目录的debugtalk.py文件,为了便于维护简化debugtalk文件,只做一层方法引用(根据需要适当增加处理),所有方法存放于方法层
* suite层(httprunner的基本层次):对于某些可固定的流程用例,做成套件
* 测试用例层(httprunner的基本层次):通过api、suite、传参等其他处理组合成测试用例,用于最终执行
xxxx(项目名称)
|-- api ## 该文件夹存放所有接口使用的方法
`-- common ## 该文件夹存放所有基础通用方法
`-- data ## 该文件夹存放所有需要的测试数据(对应的导入方法),测试数据生成的脚本
`-- create_data ##数据生成器,通过随机数、任意选择等当时生成用例所需的数据
`-- mysql ##数据库方法,对于测试过程中需要‘增删改查’数据库的操作
`-- docs ## 该文件夹存放所有的文件、图片等文件
`-- reports ## 该文件夹存放自动生成的测试报告
`-- testsuite ## 该文件夹存放所有测试模块
`-- testcases ## 该文件夹存放所有测试用例
`-- .env ## 该文件写所有的环境配置数据
`-- debugtalk.py ## 该文件定义所有api、测试模块、测试用例用到的方法
`-- requirements.txt ## 该文件记录所有需要用的框架(以便更换环境一键安装)
小编推荐直接查看官网,讲解非常清楚 https://cn.httprunner.org/
该框架分为api(接口)、suite(模块)、test(测试步骤)、config(测试用例)
api->suite->test->config
api->test->config
在debugtalk.py中使用函数取相应的值
注意:由于上一个脚本获取到的是字符串类型,如果有些参数是整数类型,取值时需要将字符串转化为需要的类型;
同时注意:如果接口参数中“”传输的字符,不需要转化即使是数字。接口参数中不加“”的类型,使用int()方法转化即可。
此处的转化主要取绝于测试步骤有没有加”“,另:如果某参数用于url,不需要将其转化类型,字符串类型即可,框架会自动识别
def get_loan_days():
return [{"loan_days": int(new_mysql.GetMysqlData(loan_days}]
- config:
parameters:
- loan_days: ${get_loan_days()}
$loan_days
该框架所有测试步骤、用例中使用的方法均需要再debugtalk文件中声明
所以方法引用规则:
具体的方法要单独一个文件来编写
在debugtalk文件中声明(推荐只做声明,或嵌套参数传出方法)
由于报告会自动生成,所以需要cd到项目内部,再hrun xxx.yml。这样报告会显示在项目内的报告文件夹中,否则会自动创建一个文件夹存储
- api:
def: api_aa_bb_POST()
name: xxxx
request:
headers: {"Content-Type":"application/json"}
url: $gwhost/xxxx/xxxx/xxxx
method: POST
json:
{
"phone":"$phone"
}
validate:
- eq: ["ok", true]
- eq: ["reason", OK]
- config:
def: suite_bb_cc()
name: xxxx
- test:
name: xxxx
api: api_xxxx_xxxx_POST()
- config:
name: xxxxxxxxx
parameters:
- phone: ${get_p2g_smoke_main_test_data(phone)}
- password: ${get_p2g_smoke_main_test_data(password)}
- test:
name: xxxxx
api: api_aa_bb_POST()
- test:
name: xxxxx
suite: suite_bb_cc()
- test:
name: xxxxx
variables:
- order_no: ${get_approval_applications_from_customer_id_order_no(SMS, $phone)}
api: api_management_peso2goUpdateAuditingResult()
setup_hooks:
- ${get_approval_applications_from_order_no_application_status($order_no)}
teardown_hooks:
- ${hook_sleep(60)}
- ${get_core_loans_from_order_no_repay_status($order_no)}