python接口测试自学1——代码优化1

优化了上次的代码,请求方式可接收get和post两种,代码中对两种方式做了判断。

测试结果中提取了测试用例的名称、请求返回的状态、请求的时间。

 1 #coding:utf-8
 2 import xlrd
 3 import requests
 4 
 5 #下文中将用到的全局变量
 6 nrows = 0
 7 rdict = {} #存储请求参数
 8 relist=[]  #存储返回结果
 9 
10 #从excel中导入数据
11 def imptestcase():
12 
13     fname = 'testcase.xlsx'
14     sheet_name='case1'
15     bk = xlrd.open_workbook(fname)
16 
17     try:
18         sheet = bk.sheet_by_name(sheet_name)
19     except:
20         print("no sheet in %s named sheet1" %fname)
21 
22     global nrows
23     nrows = sheet.nrows
24     ncols = sheet.ncols
25 
26     for i in range(0,ncols): 
27         data = sheet.col_values(i) 
28         global rdict
29         rdict[data[0]]=data[1:]
30 
31 
32 #将excel读取的数据封装成请求,并发送
33 
34 def sendpost():
35     #response = requests.post(url,json = data,headers = headers,verify=False) 
36     for i in range(0,nrows-1):
37         url = rdict['url'][i]    
38 
39         if rdict['headers'][i]!='':
40             headers = eval(rdict['headers'][i]) #str to dict
41         else:
42             headers = {}
43 
44         if rdict['json'][i]!='':
45             json = rdict['json'][i] #str to dict
46         else:
47             json = {}
48 
49         if rdict['params'][i]!='':
50             params = eval(rdict['params'][i]) #str to dict
51         else:
52             params = {}
53 
54         try:
55             if rdict['method']=='get':
56                 r = requests.get(url,headers = headers,params = params,verify=False)
57             else:
58                 r = requests.post(url,json = json,headers = headers,verify=False)
59             r.raise_for_status()
60             r.encoding=r.apparent_encoding
61             global relist
62             relist.append('Casename: '+rdict['casename'][i])
63             relist.append('Status: '+str(r.status_code))
64             relist.append('Date: '+r.headers['Date'])
65             
66         except Exception as e:
67             print(e)    
68             print('fail')
69             relist.append(str(e))
70 
71 #把返回的结果输出到html中,形成HTML报告(知识简单的展示,没有样式)
72 def output_html(): 
73     fout=open('output.html','w',encoding='UTF-8', newline='') 
74     fout.write('<html>') 
75     fout.write('<head>') 
76     fout.write('<meta charset = "UTF-8"/>') 
77     fout.write('</head>') 
78     fout.write('<body>')
79     fout.write('<h1>report<h1>')
80     fout.write('<table>')
81     fout.write('<tr>')
82     #fout.write('<td>%s</td>' % relist)
83     for i in range(0,len(relist)):
84         fout.write('<td>%s</td>' % relist[i])
85     fout.write('</tr>')
86     fout.write('</table>')
87     fout.write('</body>')
88     fout.write('</html>') 
89     fout.close()
90 
91 if __name__ == '__main__':
92     imptestcase()
93     sendpost()
94     output_html()

测试用例

测试结果

 

之后的计划:

1. 优化导入用例以及封装请求的代码

2. 优化测试结果,展示位更友好的页面

3. 由于这短时间学习的过程中使用的都是notepad来编写代码,随着代码量的增加,下一步考虑使用pycharm等IDE,便于管理。

 

题外话:

刚开始学习Python,代码写的太low,仅仅为了实现功能而已,博客园的各位大神请勿鄙视,希望能收到好的建议。

 

posted @ 2017-09-03 11:36  wy820  阅读(217)  评论(0)    收藏  举报