5、能够实现测试用例集的前置后置步骤(类似unittest的setupclass和teardownclass)
6、能够实现测试用例的前置后置步骤(类似unittest的setup和teardown)
8、测试脚本和框架代码完全分离,懂接口测试但是不懂代码的人一天即可完全掌握,超低的学习使用成本
进一步交流可以+群:929233070
在cmd窗口中切换到依赖库文件所在的目录, 输入如下命令即可:pip install -r requirements.txt
第四步:下载框架代码, 下载地址:https://github.com/duodongduode/interface_auto_test
第五步:使用pycharm打开框架代码, 恭喜你,你已经完成所有的准备工作啦。
testcase_run.py文件最后一行代码是设置执行的用例数据,可以是文件夹, 也可以是某个指定的文件, 是一个相对路径,打开这个文件右键执行就好。
打开框架代码之后,目前你只需要了解test_data目录,test_data目录下面有三个子目录, common、 api_template、 testcase
common: 定义全局变量的目录,里面有一个common.yaml文件, 里面定义全局变量
demo中定义了系统的基础路径、登陆系统的用户名和密码, 系统对应的数据库配置(数据库配置中的用户名、密码、ip、端口、库名字的变量名称不可变,否则会连接数据库失败),这个文件中可以定义任何你想要的全局变量,名字可以取任意英文名,
api_template:存在被测试系统的api定义,定义api的请求的url、方法、请求头、cookie、数据、验证方法、参数提取,这样做的目的是我们在写测试用例时,关注测试用例的数据,而非接口的调用,让接口维护更加容易, 使用的时候不一定非要定义api接口模板的,只是说用了会更好维护一点,用例更加简洁一些。
testcase:测试用例目录,下面可以建子目录,让用例不同功能块的用例归档到不同的目录中, 一般一个接口建一个用例文件, 一个文件就是一个用例集
一个用例集类似于unittest框架特点,有用例集前置步骤(setupclass) 用例前置步骤(setup) 用例(testcase) 用例后置步骤(teardown) 用例集后置步骤(teardownclass)
setupclass setup teardown teardownclass在一个用例集中只能最多有一个(可以没有), testcase可以有多个
用例集的执行顺序 setupclass setup testcase1 teardown setup testcase2 teardown ........ setup testcaseN teardown teardownclass
从给定的顺序可以看出,和unittest框架的testcase类执行顺序完全一致。
variable:定义变量,可以定义多个 如果变量定义在 setupclass teardownclass结构中,那么变量的作用域就是整个测试用例集, 定义在 setup testcase1 teardown 中的变量都是本用例有效
step: 用例步骤, 一个用例可以有很多个步骤, 一个步骤就是一次接口调用或者数据库操作
api:引用的api路径 格式:文件名_接口名 (非必须, 有的话可以减少一些)
url: 接口请求的路径, 会覆盖引用api中的url,如果用例中没有写url,以引用api中的url为准
method:接口请求的方法, 会覆盖引用api中的method,如果用例中没有写method,以引用api中的method为准
header:接口请求的请求头, 会把引用api中定义的请求头合并
cookie:接口请求的cookie, 会把引用api中定义的cookie合并
data:发送的数据, 如果是发送json数据接口,会替换api模板中定义的数据, 其他类型的接口,都会合并api模板中定义的数据
每个步骤都可以添加参数比较器,但是这个不是必须的, 而且一个参数比较器中可以添加多个验证点
module: 取值模块 response_code(取响应码),header(从响应头取值),cookie(从cookie中取值),response_content(从响应数据中取值)
value_path: 取值方式,是jsonpath表达式,是响应码这个字段可以不填
|
操作符 |
说明 |
|
= |
比较两个数据相等,可以数字,也可以是字符串, 相等返回 true ,不相等返回false |
|
!= |
比较两个数据不相等,可以数字,也可以是字符串, 不相等返回 true ,相等返回false |
|
> |
判断两个数 实际值大于预期值, 大于返回true 否则返回false |
|
>= |
判断两个数 实际值大于等于预期值, 大于等于返回true 否则返回false |
|
< |
判断两个数 实际值小于预期值, 小于返回true 否则返回false |
|
<= |
判断两个数 实际值小于等于预期值, 小于等于返回true 否则返回false |
|
contains |
判断 两个字符串, 实际值包含预期值, 包含返回true , 不包含返回false |
|
not contains |
判断 两个字符串, 实际值不包含预期值, 不包含返回true , 不包含返回false |
|
none |
判断实际值是none , none 返回true , 非 none 返回false |
|
not none |
判断实际值是 not none , not none 返回true , none 返回false |
value_path: $.X.Y 表示取sql查询结果中的X行,第N列数据
每一个步骤中可以有参数提取器,参数提取器非必须,根据需要使用,用于做接口关联,提取的参数作用域可以是全局,测试用例集 、测试用例
module:取值模块 response_code(取响应码),header(从响应头取值),cookie(从cookie中取值),response_content(从响应数据中取值)
value_path: 取值方式,是jsonpath表达式,是响应码这个字段可以不填
parameter_level: 提取参数的级别 # testcase(用例级)、 testsuite(测试用例级)、 global(全局)
value_path: $.X.Y 表示取sql查询结果中的X行,第N列数据
parameter_level: 提取参数的级别 # testcase(用例级)、 testsuite(测试用例级)、 global(全局)
变量引用参考了jmeter的变量引用格式,即 ${变量名} , 如果用例级变量, 测试用例集级变量,全局变量中都有对应的名字的变量, 优先级
|
函数名 |
作用 |
引用方法 |
|
random_choice |
从给定的值中随机选择一个 |
${{ random_choice( 3,4,5,6,10) }} 从2,3,5,6,10中随机选择一个值 |
|
random_int |
生成一个随机整数 |
${{ random_int(10,100)}} 生成一个10-100之间的随机整数 |
|
random_str |
生一个指定长度的随机字符串 |
${{ random_str(10)}} 生成一个长度为10的随机字符串 |