用Python写个接口测试框架

作者: c4a1d989518e | 来源:发表于2017-07-31 20:21 被阅读1513次

    首先要建立的一个流程是


    生成报告,可以单独说,前面几个部分可以写在一个方法里。
    可以先看下我的项目的工程结构

    建立了这个流程剩下的就是写模块了,数据源,可以用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的接口测试框架

    相关文章

      网友评论

        本文标题:用Python写个接口测试框架

        本文链接:https://www.haomeiwen.com/subject/qanrlxtx.html