42

Excel+Python十分钟跑完批量API,就是这么简单粗暴又好用

 4 years ago
source link: http://blog.sina.com.cn/s/blog_679bde160102yxr3.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

现在API测试被越来越多的公司重视,对于测试工程师来说每次收到需求之后首先要做的是研究需求文档。既然接口是两个独立系统之间同步数据或访问对方程序的途径,我们也就是要先看看这些接口到底是连接了哪两个系统,它们之间的关系到底是怎样的。所以一般需求文档里会包括接口名称,接口描述,接口类型,接口地址,推送参数,返回参数这几项内容。熟悉Postman的同学可以发现这些都是必需的部分:

7neuAby.jpg!web

有了这几项内容之后,我们需要把需求文档转换成Excel,这样不管是做案例管理,还是对比结果,都相对容易一些。而后期Python读取和写入也更方便。在Excel中,我们只写入变化的部分,而对于相对固定的,例如server信息则直接在Python代码中参数化。所以做出来的输入文档如下:

Qr6VZvE.jpg!web

有了这些内容,我们还是使用xlrd和xlwt包对excel进行处理,对于如何使用xlrd和xlwt就不在本文做过多解释了。为什么要新建一个workbook2?因为在跑完一遍之后,如果我们发现有些接口跑出来的结果有问题,我们可以不用关闭workbook1,直接进行修改,然后rerun,就会生成新的workbook2,覆盖之前的结果,节省打开关闭workbook的时间。

workbook1 = xlrd.open_workbook(r"C:\Demo\API\API_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:\Demo\API\response.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))

运行结果如图:

zyMJz2b.jpg!web 

生成的新文件:

BbM3Uzq.jpg!web

打开这个response.xls,可以看到50个API已经跑完了。点进A1可以看到response的具体内容:

7Vb6baz.jpg!web

加我VX:atstudyIT  回复关键词“测试”领取限量软件测试学习资料哦~~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK