现在API测试被越来越多的公司重视,对于测试工程师来说每次收到需求之后首先要做的是研究需求文档。既然接口是两个独立系统之间同步数据或访问对方程序的途径,我们也就是要先看看这些接口到底是连接了哪两个系统,它们之间的关系到底是怎样的。
![d040e8cb6335a83f91683bfe4b4f9b96.png](https://i-blog.csdnimg.cn/blog_migrate/851575ce28b31d84ce5bd6639ac646c9.jpeg)
所以一般需求文档里会包括接口名称,接口描述,接口类型,接口地址,推送参数,返回参数这几项内容。熟悉Postman的同学可以发现这些都是必需的部分:
![a9287540bd1d6aca8981996fd5098b62.png](https://i-blog.csdnimg.cn/blog_migrate/09e9aae62c8eeb24b39d0dad9be9734a.jpeg)
有了这几项内容之后,我们需要把需求文档转换成Excel,这样不管是做案例管理,还是对比结果,都相对容易一些。而后期Python读取和写入也更方便。在Excel中,我们只写入变化的部分,而对于相对固定的,例如server信息则直接在Python代码中参数化。所以做出来的输入文档如下:
![244a8860676c934622d5b92a08a93847.png](https://i-blog.csdnimg.cn/blog_migrate/e0eb9535042f68d7a07352cd98c5d686.jpeg)
有了这些内容,我们还是使用xlrd和xlwt包对excel进行处理,对于如何使用xlrd和xlwt就不在本文做过多解释了。为什么要新建一个workbook2?因为在跑完一遍之后,如果我们发现有些接口跑出来的结果有问题,我们可以不用关闭workbook1,直接进行修改,然后rerun,就会生成新的workbook2,覆盖之前的结果,节省打开关闭workbook的时间。
workbook1 = xlrd.open_workbook(r"C:DemoAPIAPI_Cases.xlsx")
workbook2 = xlwt.Workbook(encoding='utf-8')
sheet1 = workbook1.sheet_by_index(0)
sheet2 = workbook2.add_sheet("response")
读取内容之后,我们对需要参数化的部分进行修改,一般情况下,url的前半部分为http://xx.xx.xx.xx:8080不变,所以我们只需要把excel中第二列取出来拼接成url即可,body部分也如是,如果有固定部分的body,我们可以在python中直接定义,然后与excel中的内容进行拼接:
par_url = sheet1.col_values(1)
body = sheet1.col_values(2)
当然,拼接的代码需要写在循环里面:
request_url = 'https://postman-echo.com' + par_url[i]
print(request_url)
执行的时候,我们用到的是requests这个包,如果需求中既有GET,又有POST,又有PUT,还有DELETE,由于用到的参数不同,我们可以分别处理。对于不同请求需要用到的不同的header,我们也可以在循环里对其进行定义,如果区别很大,我们也可以在excel中单独定义一列,然后在代码中加入相应的读取语句即可。对于POST类型的请求,我们需要以下几个参数:
response = requests.post(url=request_url, headers={}, data=body[i])
print(body[i])
在执行完之后,如果直接写入excel,我们打开response文件之后会发现,所有的返回内容都变成了一行,非常不便于分析。所以我们需要先对返回的数据进行处理,再写入excel。如果返回的内容中包含中文,则必须加上ensure_ascii=False, 否则就会出现编码问题。
json_dic = json.dumps(json.loads(response.content), indent=4, ensure_ascii=False)
最后,我们把整理好的输出内容写入新建的excel文档并保存,就大功告成了。
sheet2.write(i, 0, json_dic)
workbook2.save(r"C:DemoAPIesponse.xls")
其中遇到了一些问题,也在这里提示一下,比如在POST请求中,有些参数是随机数,导致每次发送请求的时候都需要手动修改,否则就会报"已存在"之类的错,这时候我们需要用到random这个包。我们以生成10位随机数为例,在代码中用生成的10位随机数替换掉body中{{random}}的内容:
random_num = str(math.floor(1e10 * random.random()))
response = requests.post(url=request_url, headers={}, data=body[i].replace('{{random}}', random_num))
运行结果如图:
![c1cb23473b2d4f6fb1bea64ddf246e7c.png](https://i-blog.csdnimg.cn/blog_migrate/5476ab8dc932408f96951cd1181a1db0.jpeg)
生成的新文件:
![b1f36c0f873e62522fb0373aeae7955d.png](https://i-blog.csdnimg.cn/blog_migrate/6155e1a1d1bc9c4e794c1ec198a8c9d8.jpeg)
打开这个response.xls,可以看到50个API已经跑完了。点进A1可以看到response的具体内容:
![a384a48b53683097caaed66dfaef9ba1.png](https://i-blog.csdnimg.cn/blog_migrate/1339b315e5179b67e7e06685b9eb53f0.jpeg)
请关注+私信回复:“测试”就可以免费拿到软件测试学习资料
![ade39f8dab70481a4ba4887292e020d3.png](https://i-blog.csdnimg.cn/blog_migrate/5260b001fb5874b78b1d1bccad5fd8e9.jpeg)