首先恭喜下Testerhome大会开幕,并且我们社团在testerhome的百团大战中名列前三。
言归正传
到了本节,我们已经完成了基本的大用例执行框架的一部分。已经在那个demo函数中 获取到了步骤step的一切数据。
剩下的代码大概有几部分:
其实这里我们要对所有接口的请求参数中,需要获取到之前接口提取的参数的字段的值,进行标记或者说占位准备替换,就好比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大家可以去复制粘贴