这个是根据上次框架版本进行的优化
用python获取excel文件中测试用例数据
通过requets测试接口、并使用正则表达式验证响应信息内容
生成xml文件测试报告
版本更新内容:
1. 整理了CreateTest.test_main()流程逻辑
2. 优化了testcase.xls文件格式
3. 添加了生成XML文件测试报告
#!/usr/bin/env python # -*- coding: utf_8 -*- # 获取测试用例文件excel import xlrd import json class CreateExcel: def __init__(self): pass @classmethod def open_excel(cls): path = "testcase.xls" workbook = xlrd.open_workbook(path) table = workbook.sheets()[0] return table # 获取sheet @classmethod def get_nrows(cls, table): nrows = table.nrows return nrows # 获取行号 @classmethod def get_id(cls, table, nrows): testid = [] for i in range(1, nrows): testid.append(table.cell(i, 0).value) return testid @classmethod def get_name(cls, table, nrows): testname = [] for i in range(1, nrows): testname.append(table.cell(i, 1).value) return testname # 获取用例name @classmethod def get_data(cls, table, nrows): testdata = [] for i in range(1, nrows): try: data = json.loads(table.cell(i, 2).value) testdata.append(data) except ValueError: testdata.append(None) return testdata # 获取data接口参数 @classmethod def get_url(cls, table, nrows): testurl = [] for i in range(1, nrows): testurl.append(table.cell(i, 3).value) return testurl # 获取接口测试url @classmethod def get_method(cls, table, nrows): testmethod = [] for i in range(1, nrows): testmethod.append(table.cell(i, 4).value) return testmethod # 获取接口测试method @classmethod def get_pattern(cls, table, nrows): testpattern = [] for i in range(1, nrows): testpattern.append(table.cell(i, 5).value) return testpattern # 获取接口期望响应结果
#!/usr/bin/env python # -*- coding: utf_8 -*- # 测试核心组件 import requests import re from datetime import datetime from createexcel import CreateExcel from xml.dom import minidom import sys class CreateTest: reload(sys) sys.setdefaultencoding("utf-8") # 避免字符串写入文件出错 def __init__(self): pass @classmethod def test_api(cls, method, url, data): global results try: if method == "post": results = requests.post(url, data) if method == "get": results = requests.get(url, data) return results except Exception.__bases__: print "服务器访问失败" # 接口函数 @classmethod def test_on(cls): print "用例执行开始" @classmethod def test_close(cls): print "用例执行结束" @classmethod def test_result(cls, pa): global report try: pattern = re.compile(pa) match = pattern.search(testresults.text) if match.group() == pa: report = "测试通过" except AttributeError: report = "测试失败" return report # 正则表达式检测 @classmethod def test_http(cls, code): print "请求返回状态码: ", code @classmethod def test_time(cls): nowtime = datetime.today() time = nowtime.strftime("%Y-%m-%d %H:%M:%S") return time # 获取当前时间转化字符串 @classmethod def test_report(cls): nowtime = datetime.today() reportime = nowtime.strftime("%Y%m%d%H%M%S") reportname = reportime + ".xml" return reportname # 获取测试报告文件名称 @classmethod def test_main(cls): global testresults table = CreateExcel.open_excel() nrows = CreateExcel.get_nrows(table) xml = minidom.Document() xml.appendChild(xml.createComment("测试报告")) caselist = xml.createElement("caselist") xml.appendChild(caselist) for i in range(0, nrows - 1): testid = CreateExcel.get_id(table, nrows)[i] testname = CreateExcel.get_name(table, nrows)[i] testdata = CreateExcel.get_data(table, nrows)[i] testurl = CreateExcel.get_url(table, nrows)[i] testmethod = CreateExcel.get_method(table, nrows)[i] testpattern = CreateExcel.get_pattern(table, nrows)[i] # 执行测试 CreateTest.test_on() testresults = CreateTest.test_api(testmethod, testurl, testdata) testcode = str(testresults.status_code) try: CreateTest.test_http(testresults.status_code) except AttributeError: pass CreateTest.test_close() # 执行结束 # 生成xml文件 case = xml.createElement("case") case.setAttribute("id", testid) # 输入用例ID name = xml.createElement("name") name.appendChild(xml.createTextNode(testname)) # 输入用例名称 method = xml.createElement("method") method.appendChild(xml.createTextNode(testmethod)) # 输入接口类型 code = xml.createElement("code") code.appendChild((xml.createTextNode(testcode))) # 输入用例返回状态码 result = xml.createElement("result") result.appendChild(xml.createTextNode(CreateTest.test_result(testpattern))) # 输入用例测试结果 time = xml.createElement("time") time.appendChild(xml.createTextNode(CreateTest.test_time())) # 输入用例执行时间 case.appendChild(name) case.appendChild(method) case.appendChild(code) case.appendChild(result) case.appendChild(time) caselist.appendChild(case) # xml文件生成结束 filename = file(CreateTest.test_report(), "w+") # 生成以当前时间命名的测试报告文件 xml.writexml(filename) filename.close() # 关闭文件 if __name__ == '__main__': CreateTest.test_main()
下面是测试入口:
#!/usr/bin/env python # -*- coding: utf_8 -*- # **************************************************************** # interface.py # Author : ChenLei # Version : 2.0 # Date : 2016-4-15 # **************************************************************** import time from createtest import CreateTest start = time.clock() CreateTest.test_main() end = time.clock() print "接口自动化脚本运行时间:%.03f seconds" % (end - start)
运行后自动生成 当前时间的xml文件 如下:
除非注明,本博客文章均为原创,转载请以链接形式标明本文地址
本文地址:http://www.cnblogs.com/cllovewxq/p/5394549.html