python学习笔记-excel用例输入
python学习笔记(接口自动化框架V2.0)
这个是根据上次框架版本进行的优化
用python获取excel文件中测试用例数据
通过requets测试接口、并使用正则表达式验证响应信息内容生成xml文件测试报告
版本更新内容:
1. 整理了CreateTest.test_main()流程逻辑
2. 优化了testcase.xls文件格式
3. 添加了生成XML文件测试报告
代码如下:
1#!/usr/bin/env python
2# -*- coding: utf_8 -*-
3# 获取测试用例文件excel
4
5import xlrd
6import json
7
8
9class CreateExcel:
10def__init__(self):
11pass
12
13 @classmethod
14def open_excel(cls):
15 path = "testcase.xls"
16 workbook = xlrd.open_workbook(path)
17 table = workbook.sheets()[0]
18return table
19
20# 获取sheet
21
22 @classmethod
23def get_nrows(cls, table):
24 nrows = table.nrows
25return nrows
26
27# 获取行号
28
29 @classmethod
30def get_id(cls, table, nrows):
31 testid = []
32for i in range(1, nrows):
33 testid.append(table.cell(i, 0).value)
34return testid
35
36 @classmethod
37def get_name(cls, table, nrows):
38 testname = []
39for i in range(1, nrows):
40 testname.append(table.cell(i, 1).value)
41return testname
42
43# 获取用例name
44
45 @classmethod
46def 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 testdata
55
56# 获取data接口参数
57
58 @classmethod
59def get_url(cls, table, nrows):
60 testurl = []
61for i in range(1, nrows):
62 testurl.append(table.cell(i, 3).value)
63return testurl
64
65# 获取接口测试url
66
67 @classmethod
68def get_method(cls, table, nrows):
69 testmethod = []
70for i in range(1, nrows):
71 testmethod.append(table.cell(i, 4).value) 72return testmethod
73
74# 获取接口测试method
75
76 @classmethod
77def get_pattern(cls, table, nrows):
78 testpattern = []
79for i in range(1, nrows):
80 testpattern.append(table.cell(i, 5).value) 81return testpattern
82
83# 获取接口期望响应结果
84
1#!/usr/bin/env python
2# -*- coding: utf_8 -*-
3# 测试核心组件
4
5import requests
6import re
7from datetime import datetime
8from createexcel import CreateExcel
9from xml.dom import minidom
10import sys
11
12
13class CreateTest:
14 reload(sys)
15 sys.setdefaultencoding("utf-8")
16
17# 避免字符串写入文件出错
18
19def__init__(self):
20pass
21
22 @classmethod
23def test_api(cls, method, url, data):
24global results
25try:
26if method == "post":
27 results = requests.post(url, data)
28if method == "get":
29 results = requests.get(url, data)
30return results
31except Exception.__bases__:
32print"服务器访问失败"
33
34# 接口函数
35
36 @classmethod
37def test_on(cls):
38print"用例执行开始"
39
40 @classmethod
41def test_close(cls):
42print"用例执行结束"
43
44 @classmethod
45def test_result(cls, pa):
46global report
47try:
48 pattern = https://www.360docs.net/doc/6c690287.html,pile(pa)
49 match = pattern.search(testresults.text) 50if match.group() == pa:
51 report = "测试通过"
52except AttributeError:
53 report = "测试失败"
54return report
55
56# 正则表达式检测
57
58 @classmethod
59def test_http(cls, code):
60print"请求返回状态码: ", code
61
62 @classmethod
63def test_time(cls):
64 nowtime = datetime.today()
65 time = nowtime.strftime("%Y-%m-%d %H:%M:%S") 66return time
67
68# 获取当前时间转化字符串
69
70 @classmethod
71def test_report(cls):
72 nowtime = datetime.today()
73 reportime = nowtime.strftime("%Y%m%d%H%M%S")
74 reportname = reportime + ".xml"
75return reportname
76
77# 获取测试报告文件名称
78
79 @classmethod
80def test_main(cls):
81global 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)
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]
95
96# 执行测试
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:
103pass
104 CreateTest.test_close()
105# 执行结束
106# 生成xml文件
107 case = xml.createElement("case")
108 case.setAttribute("id", testid)
109# 输入用例ID
110
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
142if__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
10import time
11from createtest import CreateTest
12
13 start = time.clock()
14 CreateTest.test_main()
15 end = time.clock()
16
17print"接口自动化脚本运行时间:%.03f seconds" % (end - start)
运行后自动生成当前时间的xml文件如下:
分类: python