ython学习笔记(接口自动化框架 V2.0)详解编程语言

这个是根据上次框架版本进行的优化

用python获取excel文件中测试用例数据

通过requets测试接口、并使用正则表达式验证响应信息内容

生成xml文件测试报告

版本更新内容:

1. 整理了CreateTest.test_main()流程逻辑

2. 优化了testcase.xls文件格式

3. 添加了生成XML文件测试报告

ython学习笔记(接口自动化框架 V2.0)详解编程语言

#!/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文件 如下:

ython学习笔记(接口自动化框架 V2.0)详解编程语言

除非注明,本博客文章均为原创,转载请以链接形式标明本文地址

本文地址:http://www.cnblogs.com/cllovewxq/p/5394549.html

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15557.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论