首先恭喜下Testerhome大会开幕,并且我们社团在testerhome的百团大战中名列前三。
其次是平台的在线体验地址发布:
阿里云服务器:http://47.97.77.125:8000/home/
用户名:admin
密码:123456
你也可以自己在登陆页面注册新的。
言归正传
到了本节,我们已经完成了基本的大用例执行框架的一部分。已经在那个demo函数中 获取到了步骤step的一切数据。
剩下的代码大概有几部分:
- 提取步骤所有请求数据和断言/参数化提取 设置
- 检查请求数据中是否有需要进行承接上一个接口返回值参数化的字段,有则替换,无则过。
- 进行requests请求,拿到返回值
- 对返回值进行参数化提取和断言
其实这里我们要对所有接口的请求参数中,需要获取到之前接口提取的参数的字段的值,进行标记或者说占位准备替换,就好比html中,我们用 {{ apis }} 来表示这里是接口一样。
但是{{ }} 在html中有着标准的规范,规则。而在我们的请求数据中,用此占位则很危险,请求数据中可能会出现各种各样的字符串,很容易被我们的程序识别成占位符。所以我们要用一套新的 不经常出现的/而且易于输入的 符号表示。这里我用的: ##参数名## 来代替。当然要是有其他的也可以。
所以我们第一步,要提取出来所有的数据。
接下来就是检查是否需要替换那些##参数名##了:
首先就是找出所有符合的替换参数,所以用正则再好不过了,我们在开头引入re:
我们要替换的请求数据中的位置基本只有三处:头,体,ulr:
整理出来这三个列表,rlist_url/header/body。
然后我们依次进行替换:
全部忠实替换好,其中的eval就很显然的是 去获取那些变量了。不过目前这里的代码并不是最终版,等我们全写完是要改一点的。
然后我们继续去写调用requests发送请求:
先在顶部引入json和requests
下面代码较长,比较类似接口库请求,大家简单理解下然后本节末尾复制粘贴这个完整函数吧:
注意代码可能会后续更改,我们暂且继续写下一个段落-对返回值进行参数化提取和断言:
我们已经拿到了 我们的提取/断言设置,然后进行公式带入,就可以完成了。
但是我们 现在还没有对提取 / 断言 的几种方式 制定规则。
所以我们回到P_cases.html中,好好想想规则。这里我就直接套用我之前设计过的规则了,也欢迎大家集思广益,想出更合理的规则:
我们先来设计提取返回值路径法:
由用户 按规则 写入 即将被作为参数名的字符串=路径 这种方式提取,多个用换行分隔
例子如:
name=/data/[3]/username
id=/data/[2]/userid
然后用户如何使用呢?在后续接口的请求url/body/header中,用##name## 和 ##id## 来占位。
比如 url 写:/aaa/bb?index=zsd&uname=##name##&uid=##id##
然后经过第一个接口请求后,提取真实结果,并替换就变成来:
/aaa/bb?index=zsd&uname=wangzijia&uid=00100
所以我们先把这个规则,放在多行文本框的中的默认文案里:
后续4个多行文本框均用此方式即可。
然后我们继续另一个提取正则法的规则设置:
如上图,我们等号右侧采用 左边界(.*?)右边界的方式存储。这样我们代码中实际提取的时候 也方便了很多。
好了,本节到此结束,欢迎持续关注。代码已上到github大家可以去复制粘贴