python学习笔记(接口自动化框架V2.0)这个是根据上次框架版本进行的优化用python获取excel文件中测试用例数据通过requets测试接口、并使用正则表达式验证响应信息内容生成xml文件测试报告版本更新内容:1. 整理了CreateTest.test_main()流程逻辑2. 优化了testcase.xls文件格式3. 添加了生成XML文件测试报告代码如下:1#!/usr/bin/env python2# -*- coding: utf_8 -*-3# 获取测试用例文件excel45import xlrd6import json789class CreateExcel:10def__init__(self):11pass1213 @classmethod14def open_excel(cls):15 path = "testcase.xls"16 workbook = xlrd.open_workbook(path)17 table = workbook.sheets()[0]18return table1920# 获取sheet2122 @classmethod23def get_nrows(cls, table):24 nrows = table.nrows25return nrows2627# 获取行号2829 @classmethod30def get_id(cls, table, nrows):31 testid = []32for i in range(1, nrows):33 testid.append(table.cell(i, 0).value)34return testid3536 @classmethod37def get_name(cls, table, nrows):38 testname = []39for i in range(1, nrows):40 testname.append(table.cell(i, 1).value)41return testname4243# 获取用例name4445 @classmethod46def get_data(cls, table, nrows):47 testdata = []48for i in range(1, nrows):49try:50 data = json.loads(table.cell(i, 2).value)51 testdata.append(data)52except ValueError:53 testdata.append(None)54return testdata5556# 获取data接口参数5758 @classmethod59def get_url(cls, table, nrows):60 testurl = []61for i in range(1, nrows):62 testurl.append(table.cell(i, 3).value)63return testurl6465# 获取接口测试url6667 @classmethod68def get_method(cls, table, nrows):69 testmethod = []70for i in range(1, nrows):71 testmethod.append(table.cell(i, 4).value) 72return testmethod7374# 获取接口测试method7576 @classmethod77def get_pattern(cls, table, nrows):78 testpattern = []79for i in range(1, nrows):80 testpattern.append(table.cell(i, 5).value) 81return testpattern8283# 获取接口期望响应结果841#!/usr/bin/env python2# -*- coding: utf_8 -*-3# 测试核心组件45import requests6import re7from datetime import datetime8from createexcel import CreateExcel9from xml.dom import minidom10import sys111213class CreateTest:14 reload(sys)15 sys.setdefaultencoding("utf-8")1617# 避免字符串写入文件出错1819def__init__(self):20pass2122 @classmethod23def test_api(cls, method, url, data):24global results25try:26if method == "post":27 results = requests.post(url, data)28if method == "get":29 results = requests.get(url, data)30return results31except Exception.__bases__:32print"服务器访问失败"3334# 接口函数3536 @classmethod37def test_on(cls):38print"用例执行开始"3940 @classmethod41def test_close(cls):42print"用例执行结束"4344 @classmethod45def test_result(cls, pa):46global report47try:48 pattern = pile(pa)49 match = pattern.search(testresults.text) 50if match.group() == pa:51 report = "测试通过"52except AttributeError:53 report = "测试失败"54return report5556# 正则表达式检测5758 @classmethod59def test_http(cls, code):60print"请求返回状态码: ", code6162 @classmethod63def test_time(cls):64 nowtime = datetime.today()65 time = nowtime.strftime("%Y-%m-%d %H:%M:%S") 66return time6768# 获取当前时间转化字符串6970 @classmethod71def test_report(cls):72 nowtime = datetime.today()73 reportime = nowtime.strftime("%Y%m%d%H%M%S")74 reportname = reportime + ".xml"75return reportname7677# 获取测试报告文件名称7879 @classmethod80def test_main(cls):81global testresults82 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)88for 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]9596# 执行测试97 CreateTest.test_on()98 testresults = CreateTest.test_api(testmethod, testurl, testdata)99 testcode = str(testresults.status_code)100try:101 CreateTest.test_http(testresults.status_code)102except AttributeError:103pass104 CreateTest.test_close()105# 执行结束106# 生成xml文件107 case = xml.createElement("case")108 case.setAttribute("id", testid)109# 输入用例ID110111 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")121result.appendChild(xml.createTextNode(CreateTest.test_result(testpattern)))122# 输入用例测试结果123 time = xml.createElement("time")124 time.appendChild(xml.createTextNode(CreateTest.test_time()))125# 输入用例执行时间126127 case.appendChild(name)128 case.appendChild(method)129 case.appendChild(code)130 case.appendChild(result)131 case.appendChild(time)132133 caselist.appendChild(case)134# xml文件生成结束135 filename = file(CreateTest.test_report(), "w+")136# 生成以当前时间命名的测试报告文件137 xml.writexml(filename)138 filename.close()139# 关闭文件140141142if__name__ == '__main__':143 CreateTest.test_main()下面是测试入口:1#!/usr/bin/env python2# -*- coding: utf_8 -*-3# **************************************************************** 4# interface.py5# Author : ChenLei6# Version : 2.07# Date : 2016-4-158# **************************************************************** 910import time11from createtest import CreateTest1213 start = time.clock()14 CreateTest.test_main()15 end = time.clock()1617print"接口自动化脚本运行时间:%.03f seconds" % (end - start)运行后自动生成当前时间的xml文件如下:分类: python。