用Python写个接口测试框架
2017-07-31 本文已影响1513人
c4a1d989518e
首先要建立的一个流程是
生成报告,可以单独说,前面几个部分可以写在一个方法里。
可以先看下我的项目的工程结构
建立了这个流程剩下的就是写模块了,数据源,可以用json格式的数据源,相比于excel等,读取起来更方便,尤其是读取json里面的元素。项目中的json文件就是数据源,举个例子,其中的代码为
{
"TestId": "testcase004",
"Method": "post",
"Title": "单独推送消息",
"Desc": "单独推送消息",
"Url": "",
"InputArg": {
"action": "44803",
"account": "1865998xxxx",
"uniqueid": "00D7C889-06A0-426E-BAB1-5741A1192038",
"title": "测试测试",
"summary": "豆豆豆",
"message": "12345",
"msgtype": "25",
"menuid": "203"
},
"headers":{
"token":""
},
"body":{
"username":"",
"password":""
},
"Result": {
"status": 0,
"data": {
"uid": ,
"mobile": "",
"email": "",
],
"token": ""
},
"message": ""
}
}
这个一个json数据就相当于一个测试用例,这里面包含了,测试用例标号,向后台的请求方式get,post,还有传入的headers和body,当获取返回值以后,还可以对比预期的数据result来做断言。
接下来就是发送请求的部分,在req.py文件中的部分代码如下
def sendData(testData):
with open('leftside.txt', 'a+') as f:
f.write(testData['TestId'])
f.write('-')
f.write(testData['Title'])
f.write('\n')
data = requests.get(testData['Url'], headers=testData['headers'],data=testData['body'])
r = data.json()
就是写入一个叫leftside.txt的文件,并且获取返回值,工程目录中的txt文件实现的功能和数据库相同,只不过用txt文件比较简单,比较容易查看,也比较容易使用。
还有一部分是做断言的部分
with open('result.txt', 'a+') as rst:
rst.write('返回数据')
rst.write('|')
# 写测试结果
try:
if cmp(r, testData['Result']) == 0:
rst.write('pass')
else:
rst.write('fail')
except Exception:
rst.write('no except result')
rst.write('\n')
cmp函数有什么作用,
cmp()函数规则:cmp(x ,y) ,当x<y会返回负数、当x>y会返回正数、当x=y则返回0。
所以这里对比一看就知道了,这里先提前放出最终效果图来会更容易理解。
image.png主要就是分的三种情况。
实现的差不多了在结尾加个main函数
if __name__ == "__main__":
sendData(testData)
sendData(guideData)
或者在其他函数中调用
# -*- coding: utf-8 -*-
import req
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import requests
import json
f = file("case.json")
testData = json.load(f)
f.close()
f = file("guide.json")
guideData = json.load(f)
f.close()
ab=req
ab.sendData(testData)
ab.sendData(guideData)
到了这一步,有了result文件,就基本上可以了,但是为了美观,还是要做个web来才更好看,也更一目了然。这时候,就要用到django的框架了。
我的工程结构大概是这样
新建django文件的工程结构并不是这样
Django 创建第一个项目
可以参照上面的教程回忆django的用法。
主要说下view文件
import req
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import requests
import json
f = file("C:\Users\Manu\PycharmProjects\\testProject\\testProject\case.json")
testData = json.load(f)
f.close()
f = file("C:\Users\Manu\PycharmProjects\\testProject\\testProject\guide.json")
guideData = json.load(f)
f.close()
def index(request):
ab = req
ab.sendData(testData)
ab.sendData(guideData)
注意引用req里的方法的时候,txt文件的定位,它的path。
还有就是指向html文件,
return render(request, 'index.html', {"leftside": leftside,
"rst_data": rst_data,
"pass": passed,
"fail": fail,
"noresult": noresult})
这个html文件需要与其他四个文件在同一层级下,新建templates文件夹,然后把html文件放在里面,然后到settings.py文件中进行指定
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/')],
就可以省去很多路径。
文章参考:
基于Python的接口测试框架