一、apin介绍及安装
1、什么是apin
apin是柠檬班——木森开发的一个无需写代码,就可以进行接口自动化测试的框架,只需要通过json或yaml文件编写非常简洁的用例数据,即可完成接口自动化测试,并生成自动化测试报告。apin旨在帮助更多不会写代码的小伙伴掌握接口自动化测试的能力。框架使用起来非常简单,易上手,只需要几个小时就能掌握!目前发布的是第一个版本后续会持续优化,丰富新的功能
2、安装apin
apin是基于python3.6开发的,安装前请确认你的python版本>3.6
-
安装命令
pip install apin
二、快速入门
1、项目创建
-
创建命令
apin create 项目名
安装好apin之后,打开命令终端输入创建命令,即可在当前路径下创建项目。
cd 切换到项目之中,即可看到如下的项目结构
-
项目文件说明
-
casedata: 存放yaml和json格式编写的用例文件
-
testcases:py:存放py编写的用例目录
-
func_tools.py:自定义的函数工具文件
-
setting.py:整个项目的全局配置文件
-
run.py:项目运行入口文件
-
2、用例编写
apin用例编写支持yaml文件,json文件,py文件三种方式,下面通过一个接口的用例demo来快速了解一下
1、接口demo:
-
接口地址:http://httpbin.org/post
-
请求方法:post
-
请求参数类型:application/json
-
请求参数:
参数名 类型 说明 user str 账号 pwd str 密码
2、json编写用例
在项目的casedata目录下,定义一个以test开头的json文件,按照【apin用例编写规范-json】编写用例即可
-
案例
{ "host": "http://api.XXX.com/futureloan/", "Cases": [ { "title": "普通用户注册", "interface": "member/register", "method": "post", "json":{"mobile_phone":"133010121224","pwd":"lemonban"}, "verification": [] } ] }
3、yaml编写用例
在项目的casedata目录下,定义一个以test开头的yaml文件,按照【apin用例编写规范-yaml】编写用例即可
-
案例
# 域名 host: http://api.XXX.com/futureloan/ # 用例数据 Cases: - title: 普通用户注册 interface: member/register method: post json: mobile_phone: ${{user_mobile}} pwd: lemonban
4、py文件编写用例
在testcases目录中定义一个以test开头的py文件,定义一个以Test开头的类,并且继承于apin.core.httptest.HttpCase类,按照【apin用例编写规范-py】编写用例即可
-
案例
from apin.core.httptest import HttpCase class TestStreamV3(HttpCase): host = "http://api.XXX.com/futureloan/" Cases = [ # 用例1:普通用户注册 { 'title': "普通用户注册", 'interface': "member/register", "method": "post", 'json': {"mobile_phone": "${{user_mobile}}", "pwd": "lemonban"}, }, ]
3、用例运行
-
方式1:
终端项目路径下输入命令
apin run
-
方式2
直接使用python运行项目的run.py文件
4、测试报告和日志
-
日志:项目运行完,会自动在项目路径下生成详细的运行日志
-
测试报告:apin的测试报告是基第三方库unittestreport生成的
运行完会在项目目录的reports目录中,自动生成详细的html测试报告。
关于apin的入门使用就介绍到这里啦,后续会更新apin使用的详细文档
三、用例编写规范
1、概念介绍:
-
用例集:apin中创建的每一个test开头的用例文件(py,json,yaml),被称之为一个用例集。一个用例集下面可以定义多条测试用例。
-
测试用例: 用例集中Cases字段中的一条数据就是一个测试用例
2、用例集的主要字段介绍
-
host:用例接口的host地址(接口的域名)
-
类型:字符串
-
例:
host = "http://api.lemonban.com/futureloan/"
-
-
headers:指定用例使用的请求头
-
类型:字典
-
例
headers = {"User-Agent": "apin/musen"}
-
-
method:指定用例接口的请求方法
-
类型:字符串
-
例:post,get
-
-
interface:指定用例接口地址(接口url域名后面的部分)
-
类型:字符串
-
-
env: 设置用例集运行环境的局部变量
-
类型:字典
-
例:
env = { "user_mobile": '13109099878', "pwd": 'lemonban' }
-
-
extract:指定用例请求完要提取的变量
-
verification:指定用例的断言
-
Cases:设置该测试集下的用例
3、用例字段介绍
1、主要字段:
-
用例集中除env字段之外的字段
-
1、用例集中除env和Cases字段之外,上述用例集中的字段,均支持在用例中自定义。
-
2、如果用例中定义了用例集中的字段,就使用自己定义的,没定义则引用 用例集中的。
-
-
title:用例的描述字段(必传字段)
测试报告和日志信息中用例的描述
-
json: 用来传递json类型的请求参数
请求参数类型为:content-type:application/json,使用该字段来传递请求参数
-
data:用来传递表单类型的请求参数
请求参数类型为:content-type: application/x-www-form-urlencoded,使用该字段来传递请求参数
-
params: 用来查询字符串参数
请求参数,以?key=value的形式 拼接在url后面的参数
2、其他字段
除了上述主要字段之外,python中的requests库中的requests.request方法所有的请求参数,均支持在用例中定义字段,
这些字段在大多数情况下都用不到,如果有用到
-
files:接口用于文件上传
请求参数类型为:content-type:application/from-data,使用该字段来传递请求参数,常用语文件上传
-
cookies:请求的cookie信息(apin中同一个用例集会自动化传递cookie,一遍情况下,不需要使用该字段来传递cookie)
-
auth: 用于Basic/Digest/Custom HTTP认证
-
timeout:设置http请求超时时间
-
allow_redirects:是否运行请求重定向
-
proxies:代理请求的
-
stream:是否立即下载响应内容
-
verify:是否进行证书校验(如果要忽略HTTPS请求的证书校验,则将此参数设置为False)
-
cert:指定校验证书的路径
4、用例编写
1、python编写用例
-
步骤一、在testcases目录中定义一个以test开头的py文件,
-
步骤二、在文件中定义一个以Test开头的类,并且继承于apin.core.httptest.HttpCase类
-
步骤三、在类中,编写测试集的字段值
-
字段名 = 字段值
from apin.core.httptest import HttpCase class TestDomeV3(HttpCase): host = "http://api.lemonban.com/futureloan/" headers = {"X-Lemonban-Media-Type": "lemonban.v2"} # 定义测试前置方法 setup_hook = {"timestamp": 'F{get_timestamp()}'} # 预设变量 env = { "user_mobile": 'F{rand_phone("155")}', "admin_mobile": 'F{rand_phone("133")}' } # 结果校验 verification = [ ["eq", 0, 'V{{$..code}}'], ["eq", "OK", "V{{$..msg}}"] ]
-
-
步骤四、在Cases字段中编写用例数据
from apin.core.httptest import HttpCase class TestDomeV3(HttpCase): host = "http://api.XXXX.com/futureloan/" headers = {"X-Lemonban-Media-Type": "lemonban.v2"} # 定义测试前置方法 setup_hook = {"timestamp": 'F{get_timestamp()}'} # 预设变量 env = { "user_mobile": 'F{rand_phone("155")}', "admin_mobile": 'F{rand_phone("133")}' } # 结果校验 verification = [ ["eq", 200, 'status_code'], ["eq", {'code': 0, "msg": "OK"}, {'code': 'V{{$..code}}', "msg": "V{{$..msg}}"}] ] Cases = [ # 用例1:普通用户注册 { 'title': "普通用户注册", 'interface': "member/register", "method": "post", 'json': {"mobile_phone": "${{user_mobile}}", "pwd": "lemonban"}, }, # 用例2:管理员注册 { 'title': "管理员注册", 'interface': "member/register", "method": "post", 'json': {"mobile_phone": "${{admin_mobile}}", "pwd": "lemonban", "type": 0} }, ]
3、yaml编写用例
使用yaml编写用例前 建议先去学习一下yaml的语法
-
步骤一:在casedata中定义一个test开头的yaml文件
-
步骤二:在yaml文件中定义测试集的字段值
# 域名 host: http://api.xxxxx.com/futureloan/ # 请求头 headers: X-Lemonban-Media-Type: lemonban.v2 # 用例前置钩子函数 setup_hook: timestamp: F{get_timestamp()} # 预设运行变量 env: user_mobile: F{rand_phone("155")} admin_mobile: F{rand_phone("133")} # 结果校验字段 verification: - ["eq", 0, 'V{{$..code}}'] - ["eq", "OK", "V{{$..msg}}"]
-
步骤三:在Cases字段中编写测试用例
# 用例数据 Cases: - title: 普通用户注册 interface: member/register method: post json: mobile_phone: ${{user_mobile}} pwd: lemonban - title: 管理员注册 interface: member/register method: post json: mobile_phone: ${{admin_mobile}} pwd: lemonban type: 0
4、json编写用例
使用yaml编写用例前 建议先去学习一下json的语法,json文件中字段名都需要使用双引号
-
步骤一:在casedata中定义一个test开头的json文件
-
步骤二:在json文件中定义测试集的字段值
-
步骤三:在json文件中定义测试集的字段值
{ "host": "http://api.XXXXX.com/futureloan/", "headers": {"X-Lemonban-Media-Type": "lemonban.v2"}, "setup_hook": {"timestamp": "F{get_timestamp()}"}, "env": { "user_mobile": "F{rand_phone('155')}", "admin_mobile": "F{rand_phone('133')}" }, "verification": [ ["eq", {"code": 0, "msg": "OK"}, {"code": "V{{$..code}}", "msg": "V{{$..msg}}"}] ], "Cases": [ { "title": "普通用户注册", "interface": "member/register", "method": "post", "json": { "mobile_phone": "${{user_mobile}}", "pwd": "lemonban" } }, { "title": "管理员注册", "interface": "member/register", "method": "post", "json": { "mobile_phone": "${{admin_mobile}}", "pwd": "lemonban", "type": 0 } } ] }
欢迎来到testingpai.com!
注册 关于