python写接口自动化框架,,代码如下: 1 #


技术分享

代码如下:

技术分享
  1 #!/usr/bin/env python  2 # -*- coding: utf_8 -*-  3 # 获取测试用例文件excel  4   5 import xlrd  6 import json  7   8   9 class CreateExcel: 10     def __init__(self): 11         pass 12  13     @classmethod 14     def open_excel(cls): 15         path = "testcase.xls" 16         workbook = xlrd.open_workbook(path) 17         table = workbook.sheets()[0] 18         return table 19  20     # 获取sheet 21  22     @classmethod 23     def get_nrows(cls, table): 24         nrows = table.nrows 25         return nrows 26  27     # 获取行号 28  29     @classmethod 30     def get_id(cls, table, nrows): 31         testid = [] 32         for i in range(1, nrows): 33             testid.append(table.cell(i, 0).value) 34         return testid 35  36     @classmethod 37     def get_name(cls, table, nrows): 38         testname = [] 39         for i in range(1, nrows): 40             testname.append(table.cell(i, 1).value) 41         return testname 42  43     # 获取用例name 44  45     @classmethod 46     def get_data(cls, table, nrows): 47         testdata = [] 48         for i in range(1, nrows): 49             try: 50                 data = json.loads(table.cell(i, 2).value) 51                 testdata.append(data) 52             except ValueError: 53                 testdata.append(None) 54         return testdata 55  56     # 获取data接口参数 57  58     @classmethod 59     def get_url(cls, table, nrows): 60         testurl = [] 61         for i in range(1, nrows): 62             testurl.append(table.cell(i, 3).value) 63         return testurl 64  65     # 获取接口测试url 66  67     @classmethod 68     def get_method(cls, table, nrows): 69         testmethod = [] 70         for i in range(1, nrows): 71             testmethod.append(table.cell(i, 4).value) 72         return testmethod 73  74     # 获取接口测试method 75  76     @classmethod 77     def get_pattern(cls, table, nrows): 78         testpattern = [] 79         for i in range(1, nrows): 80             testpattern.append(table.cell(i, 5).value) 81         return testpattern 82  83     # 获取接口期望响应结果 84 
技术分享技术分享
  1 #!/usr/bin/env python  2 # -*- coding: utf_8 -*-  3 # 测试核心组件  4   5 import requests  6 import re  7 from datetime import datetime  8 from createexcel import CreateExcel  9 from xml.dom import minidom 10 import sys 11  12  13 class CreateTest: 14     reload(sys) 15     sys.setdefaultencoding("utf-8") 16  17     # 避免字符串写入文件出错 18  19     def __init__(self): 20         pass 21  22     @classmethod 23     def test_api(cls, method, url, data): 24         global results 25         try: 26             if method == "post": 27                 results = requests.post(url, data) 28             if method == "get": 29                 results = requests.get(url, data) 30             return results 31         except Exception.__bases__: 32             print "服务器访问失败" 33  34     # 接口函数 35  36     @classmethod 37     def test_on(cls): 38         print "用例执行开始" 39  40     @classmethod 41     def test_close(cls): 42         print "用例执行结束" 43  44     @classmethod 45     def test_result(cls, pa): 46         global report 47         try: 48             pattern = re.compile(pa) 49             match = pattern.search(testresults.text) 50             if match.group() == pa: 51                 report = "测试通过" 52         except AttributeError: 53             report = "测试失败" 54         return report 55  56     # 正则表达式检测 57  58     @classmethod 59     def test_http(cls, code): 60         print "请求返回状态码: ", code 61  62     @classmethod 63     def test_time(cls): 64         nowtime = datetime.today() 65         time = nowtime.strftime("%Y-%m-%d %H:%M:%S") 66         return time 67  68     # 获取当前时间转化字符串 69  70     @classmethod 71     def test_report(cls): 72         nowtime = datetime.today() 73         reportime = nowtime.strftime("%Y%m%d%H%M%S") 74         reportname = reportime + ".xml" 75         return reportname 76  77     # 获取测试报告文件名称 78  79     @classmethod 80     def test_main(cls): 81         global testresults 82         table = CreateExcel.open_excel() 83         nrows = CreateExcel.get_nrows(table) 84         xml = minidom.Document() 85         xml.appendChild(xml.createComment("测试报告")) 86         caselist = xml.createElement("caselist") 87         xml.appendChild(caselist) 88         for i in range(0, nrows - 1): 89             testid = CreateExcel.get_id(table, nrows)[i] 90             testname = CreateExcel.get_name(table, nrows)[i] 91             testdata = CreateExcel.get_data(table, nrows)[i] 92             testurl = CreateExcel.get_url(table, nrows)[i] 93             testmethod = CreateExcel.get_method(table, nrows)[i] 94             testpattern = CreateExcel.get_pattern(table, nrows)[i] 95  96             # 执行测试 97             CreateTest.test_on() 98             testresults = CreateTest.test_api(testmethod, testurl, testdata) 99             testcode = str(testresults.status_code)100             try:101                 CreateTest.test_http(testresults.status_code)102             except AttributeError:103                 pass104             CreateTest.test_close()105             # 执行结束106             # 生成xml文件107             case = xml.createElement("case")108             case.setAttribute("id", testid)109             # 输入用例ID110 111             name = xml.createElement("name")112             name.appendChild(xml.createTextNode(testname))113             # 输入用例名称114             method = xml.createElement("method")115             method.appendChild(xml.createTextNode(testmethod))116             # 输入接口类型117             code = xml.createElement("code")118             code.appendChild((xml.createTextNode(testcode)))119             # 输入用例返回状态码120             result = xml.createElement("result")121             result.appendChild(xml.createTextNode(CreateTest.test_result(testpattern)))122             # 输入用例测试结果123             time = xml.createElement("time")124             time.appendChild(xml.createTextNode(CreateTest.test_time()))125             # 输入用例执行时间126 127             case.appendChild(name)128             case.appendChild(method)129             case.appendChild(code)130             case.appendChild(result)131             case.appendChild(time)132 133             caselist.appendChild(case)134             # xml文件生成结束135         filename = file(CreateTest.test_report(), "w+")136         # 生成以当前时间命名的测试报告文件137         xml.writexml(filename)138         filename.close()139         # 关闭文件140 141 142 if __name__ == ‘__main__‘:143     CreateTest.test_main()
技术分享

下面是测试入口:

技术分享
 1 #!/usr/bin/env python 2 # -*- coding: utf_8 -*- 3 # **************************************************************** 4 # interface.py 5 # Author     : ChenLei 6 # Version    : 2.0 7 # Date       : 2016-4-15 8 # **************************************************************** 9 10 import time11 from createtest import CreateTest12 13 start = time.clock()14 CreateTest.test_main()15 end = time.clock()16 17 print "接口自动化脚本运行时间:%.03f seconds" % (end - start)
技术分享

运行后自动生成 当前时间的xml文件 如下:

技术分享

分类:python

python写接口自动化框架

评论关闭