Python+requests+unittest+excel接口自动化测试框架_python unittest excel

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

57 “errorCode”: 1000,
58 “errorDesc”: “成功”,
59 “status”: 1,
60 “timestamp”: 1507979239100
61 }
62 res = “data.out_trade_no”
63 json_exe = parse(res)
64 madle = json_exe.find(order)
65 print [math.value for math in madle][0]

五、工具类包 tool

5.1 操作excel (operation_excel.py)

1 #coding:utf-8
2 import xlrd
3 from xlutils.copy import copy
4 class OperationExcel:
5 def init(self,file_name=None,sheet_id=None):
6 if file_name:
7 self.file_name = file_name
8 self.sheet_id = sheet_id
9 else:
10 self.file_name = ‘…/dataconfig/case1.xls’
11 self.sheet_id = 0
12 self.data = self.get_data()
13
14 #获取sheets的内容
15 def get_data(self):
16 data = xlrd.open_workbook(self.file_name)
17 tables = data.sheets()[self.sheet_id]
18 return tables
19
20 #获取单元格的行数
21 def get_lines(self):
22 tables = self.data
23 return tables.nrows
24
25 #获取某一个单元格的内容
26 def get_cell_value(self,row,col):
27 return self.data.cell_value(row,col)
28
29 #写入数据
30 def write_value(self,row,col,value):
31 ‘’’
32 写入excel数据
33 row,col,value
34 ‘’’
35 read_data = xlrd.open_workbook(self.file_name)
36 write_data = copy(read_data)
37 sheet_data = write_data.get_sheet(0)
38 sheet_data.write(row,col,value)
39 write_data.save(self.file_name)
40
41 #根据对应的caseid 找到对应行的内容
42 def get_rows_data(self,case_id):
43 row_num = self.get_row_num(case_id)
44 rows_data = self.get_row_values(row_num)
45 return rows_data
46
47 #根据对应的caseid找到对应的行号
48 def get_row_num(self,case_id):
49 num = 0
50 clols_data = self.get_cols_data()
51 for col_data in clols_data:
52 if case_id in col_data:
53 return num
54 num = num+1
55
56
57 #根据行号,找到该行的内容
58 def get_row_values(self,row):
59 tables = self.data
60 row_data = tables.row_values(row)
61 return row_data
62
63 #获取某一列的内容
64 def get_cols_data(self,col_id=None):
65 if col_id != None:
66 cols = self.data.col_values(col_id)
67 else:
68 cols = self.data.col_values(0)
69 return cols
70
71
72 if name == ‘main’:
73 opers = OperationExcel()
74 print opers.get_cell_value(1,2)

5.2判断字符串包含,判断字典是否相等(common_util.py)

1 #coding:utf-8
2 import json
3 class CommonUtil:
4 def is_contain(self,str_one,str_two):
5 ‘’’
6 判断一个字符串是否再另外一个字符串中
7 str_one:查找的字符串
8 str_two:被查找的字符串
9 ‘’’
10 flag = None
11 if isinstance(str_one,unicode):
12 str_one = str_one.encode(‘unicode-escape’).decode(‘string_escape’)
13 return cmp(str_one,str_two)
14 if str_one in str_two:
15 flag = True
16 else:
17 flag = False
18 return flag
19
20
21 def is_equal_dict(self,dict_one,dict_two):
22 ‘’’
23 判断两个字典是否相等
24 ‘’’
25 if isinstance(dict_one,str):
26 dict_one = json.loads(dict_one)
27 if isinstance(dict_two,str):
28 dict_two = json.loads(dict_two)
29 return cmp(dict_one,dict_two)

5.3 操作header(operation_herder.py)

1 #coding:utf-8
2 import requests
3 import json
4 from operation_json import OperetionJson
5
6
7 class OperationHeader:
8
9 def init(self,response):
10 self.response = json.loads(response)
11
12 def get_response_url(self):
13 ‘’’
14 获取登录返回的token的url
15 ‘’’
16 url = self.response[‘data’][‘url’][0]
17 return url
18
19 def get_cookie(self):
20 ‘’’
21 获取cookie的jar文件
22 ‘’’
23 url = self.get_response_url()+“&callback=jQuery21008240514814031887_1508666806688&_=1508666806689”
24 cookie = requests.get(url).cookies
25 return cookie
26
27 def write_cookie(self):
28 cookie = requests.utils.dict_from_cookiejar(self.get_cookie())
29 op_json = OperetionJson()
30 op_json.write_data(cookie)
31
32 if name == ‘main’:
33
34 url = “http://www.jd.com/passport/user/login”
35 data = {
36 “username”:“18513199586”,
37 “password”:“111111”,
38 “verify”:“”,
39 “referer”:“https://www.jd.com”
40 }
41 res = json.dumps(requests.post(url,data).json())
42 op_header = OperationHeader(res)
43 op_header.write_cookie()

5.4 操作json文件(operation_json.py)

1 #coding:utf-8
2 import json
3 class OperetionJson:
4
5 def init(self,file_path=None):
6 if file_path == None:
7 self.file_path = ‘…/dataconfig/user.json’
8 else:
9 self.file_path = file_path
10 self.data = self.read_data()
11
12 #读取json文件
13 def read_data(self):
14 with open(self.file_path) as fp:
15 data = json.load(fp)
16 return data
17
18 #根据关键字获取数据
19 def get_data(self,id):
20 print type(self.data)
21 return self.data[id]
22
23 #写json
24 def write_data(self,data):
25 with open(‘…/dataconfig/cookie.json’,‘w’) as fp:
26 fp.write(json.dumps(data))
27
28
29
30 if name == ‘main’:
31 opjson = OperetionJson()
32 print opjson.get_data(‘shop’)

5.5 操作数据库(connect_db.py)

1 #coding:utf-8
2 import MySQLdb.cursors
3 import json
4 class OperationMysql:
5 def init(self):
6 self.conn = MySQLdb.connect(
7 host=‘localhost’,
8 port=3306,
9 user=‘root’,
10 passwd=‘123456’,
11 db=‘le_study’,
12 charset=‘utf8’,
13 cursorclass=MySQLdb.cursors.DictCursor
14 )
15 self.cur = self.conn.cursor()
16
17 #查询一条数据
18 def search_one(self,sql):
19 self.cur.execute(sql)
20 result = self.cur.fetchone()
21 result = json.dumps(result)
22 return result
23
24 if name == ‘main’:
25 op_mysql = OperationMysql()
26 res = op_mysql.search_one(“select * from web_user where Name=‘ailiailan’”)
27 print res

5.6 发送报告邮件(send_email.py)

1 #coding:utf-8
2 import smtplib
3 from email.mime.text import MIMEText
4 class SendEmail:
5 global send_user
6 global email_host
7 global password
8 email_host = “smtp.163.com”
9 send_user = “jiaxiaonan666@163.com”
10 password = “jia_668”
11 def send_mail(self,user_list,sub,content):
12 user = “jiaxiaonan”+“<”+send_user+“>”
13 message = MIMEText(content,_subtype=‘plain’,_charset=‘utf-8’)
14 message[‘Subject’] = sub
15 message[‘From’] = user
16 message[‘To’] = “;”.join(user_list)
17 server = smtplib.SMTP()
18 server.connect(email_host)
19 server.login(send_user,password)
20 server.sendmail(user,user_list,message.as_string())
21 server.close()
22
23 def send_main(self,pass_list,fail_list):
24 pass_num = float(len(pass_list))
25 fail_num = float(len(fail_list))
26 count_num = pass_num+fail_num
27 #90%
28 pass_result = “%.2f%%” %(pass_num/count_num100)
29 fail_result = “%.2f%%” %(fail_num/count_num
100)
30
31
32 user_list = [‘609037724@qq.com’]
33 sub = “接口自动化测试报告”
34 content = “此次一共运行接口个数为%s个,通过个数为%s个,失败个数为%s,通过率为%s,失败率为%s” %(count_num,pass_num,fail_num,pass_result,fail_result )
35 self.send_mail(user_list,sub,content)
36
37 if name == ‘main’:
38 sen = SendEmail()
39 sen.send_main([1,2,3,4],[2,3,4,5,6,7])

六、主函数

run_test.py

1 #coding:utf-8
2 import sys
3 sys.path.append(“C:/Users/lxz/Desktop/InterFace_JIA”)
4 from base.runmethod import RunMethod
5 from operation_data.get_data import GetData
6 from tool.common_util import CommonUtil
7 from operation_data.dependent_data import DependdentData
8 from tool.send_email import SendEmail
9 from tool.operation_header import OperationHeader
10 from tool.operation_json import OperetionJson
11 class RunTest:
12 def init(self):
13 self.run_method = RunMethod()
14 self.data = GetData()
15 self.com_util = CommonUtil()
16 self.send_mai = SendEmail()
17
18 #程序执行的
19 def go_on_run(self):
20 res = None
21 pass_count = []
22 fail_count = []
23 #10 0,1,2,3
24 rows_count = self.data.get_case_lines()
25 for i in range(1,rows_count):
26 is_run = self.data.get_is_run(i)
27 if is_run:
28 url = self.data.get_request_url(i)
29 method = self.data.get_request_method(i)
30 request_data = self.data.get_data_for_json(i)
31 expect = self.data.get_expcet_data_for_mysql(i)
32 header = self.data.is_header(i)
33 depend_case = self.data.is_depend(i)
34 if depend_case != None:
35 self.depend_data = DependdentData(depend_case)
36 #获取的依赖响应数据
37 depend_response_data = self.depend_data.get_data_for_key(i)
38 #获取依赖的key
39 depend_key = self.data.get_depend_field(i)
40 request_data[depend_key] = depend_response_data
41 if header == ‘write’:
42 res = self.run_method.run_main(method,url,request_data)
43 op_header = OperationHeader(res)
44 op_header.write_cookie()

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
request_data)
43 op_header = OperationHeader(res)
44 op_header.write_cookie()

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-2CfcjTdw-1713348078423)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值