编程技术类软件测试自动化&接口测试

用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的接口测试框架

上一篇下一篇

猜你喜欢

热点阅读