当前位置: 首页 > news >正文

英语网站源码丹徒网站建设代理商

英语网站源码,丹徒网站建设代理商,wordpress伪静态,wordpress 删除数据库前言#xff1a;上篇文章python3requestsunittest#xff1a;接口自动化测试#xff08;一#xff09;#xff1a;已经介绍了基于unittest框架的实现接口自动化#xff0c;但是也存在一些问题#xff0c;比如最明显的测试数据和业务没有区分开#xff0c;接口用例不便于…前言上篇文章python3requestsunittest接口自动化测试一已经介绍了基于unittest框架的实现接口自动化但是也存在一些问题比如最明显的测试数据和业务没有区分开接口用例不便于管理等所以又对此修改完善。接下来主要是介绍该套接口自动化框架的设计到实现参考代码的git地址https://github.com/zhangying123456/python3_interface 1.代码框架展示 1case存放测试用例数据的比如请求类型get/post、请求url、请求header、请求数据等 2data获取excel文件中相应数据的方法封装获取excel中对应表格内的数据excel的行列数据等get_data.py判断用例之间是否存在依赖关系并获取依赖数据dependent_data.py初始化excel文件data_config.py 3dataconfig存放请求中涉及到的header、data、cookies等数据 4log存放测试完成之后生成的日志文件可以查看日志定位问题 5main脚本执行的主函数run_test.py 6util通用方法的封装各种不同断言方式common_assert.py对excel文件的读写操作operation_excel.py从请求返回数据中拿取数据作为下一个接口的请求header数据operation_header.py从json文件中拿取想要的数据operation_json.py将接口自动化过程中的相关日志输出到log.txt中print_log.py根据请求类型的不同执行对应的get/post方法runmethod.py将测试结果以邮件形式发送给相关人员send_mail.py。 2.代码实现说明 1首先看下用例数据 说明该用例只是用来覆盖一些接口场景而测试使用的有兴趣的可以参考源码用自己项目的真实数据来实现 先判断是否执行如果yes执行该条用例如果no直接跳过该条用例。 执行用例获取用例的url、请求类型、请求头header、请求数据request.get/post执行该条接口用例。 在执行用例过程中会存在特殊情况1比如test_04依赖于test_03test_04中的请求字段supplier的参数数据来源于test_03的response中value[0].biz字段的数据所以在执行接口过程中需要判断是否存在依赖关系2比如test_06请求数据需要test_05的response中的cookies数据所以这种类型接口也要特殊处理。 执行完成后写入实际结果与预期结果做对比进行断言。 2看了用例excel后对基本的流程有个大概了解现在的问题就是如何拿取对应的数据执行接口得到运行结果 if is_run:url self.data.get_request_url(i)method self.data.get_request_method(i)#获取请求参数data self.data.get_data_value(i)# 获取excel文件中header关键字header_key self.data.get_request_header(i)# 获取json文件中header_key对应的头文件数据header self.data.get_header_value(i)expect self.data.get_expect_data(i)depend_case self.data.is_depend(i) 举例说明1请求url数据是存放在excel中我们通过操作excel文件到特定单元格拿到url数据 #获取urldef get_request_url(self,row):col int(data_config.get_url())url self.oper_excel.get_cell_value(row,col)return url 举例说明2请求头header或者请求数据中有的数据为空所以我们在拿取数据过程中要做判断  #获取请求数据def get_request_data(self,row):col int(data_config.get_data())data self.oper_excel.get_cell_value(row,col)if data :return Nonereturn data 首先拿取excel中表格中的关键字再通过关键字去对应json文件拿取具体的请求数据。比如先拿取excel中请求数据中的hotwords再根据此关键字去json文件读取hotwords的键值数据 hotwords: {bizName: globalSearchClient,sign: 8c8bc3ee9d6c4b7b8a390ae298cb6db5,timeMills: 1524906299999} #通过获取请求关键字拿到data数据def get_data_value(self,row):oper_json OperationJson(../dataconfig/request_data.json)request_data oper_json.get_data(self.get_request_data(row))return request_data #根据关键字获取数据dict[key]只能获取存在的值如果不存在则触发KeyErrordict.get(key, defaultNone)返回指定键的值如果值不在字典中返回默认值Noneexcel文件中请求数据有可能为空所以用get方法获取def get_data(self,key):# return self.data[key]return self.data.get(key) 3一般的接口都是单接口即是单独请求没有上下依赖关系的针对这种只要模拟请求拿到数据进行断言就可以了。但是实际项目中会存在特殊场景比如test_03和test04 说明test_04中请求数据qqmusic_more中的supplier字段依赖于test_03中的返回数据value[0].biz的值 qqmusic_more: {bizName: globalSearchClient,appLan: zh_CN,musicLimit: 20,imei: 864044030085594,keyword: fly,timeMills: 1527134461256,page: 0,sign: 17daa7e3e84bd4dfbe9a1bd9a1bd7e62,mac: 90f05205d7b7,sessionId: 43e605b914874cd99b47ac997e19c1a1,network: 1,supplier: ,language: zh_CN,} 先执行test_03获取依赖的返回数据value[0].biz的值 #执行依赖测试获取test_03返回结果def run_dependent(self):row_num self.oper_excel.get_row_num(self.case_id)request_data self.data.get_data_value(row_num)header self.data.get_request_header(row_num)method self.data.get_request_method(row_num)url self.data.get_request_url(row_num)res self.method.run_main(method,url,request_data,header,paramsrequest_data)return res#获取依赖字段的响应数据通过执行依赖测试case来获取响应数据响应中某个字段数据作为依赖key的valuedef get_value_for_key(self,row):#获取依赖的返回数据keydepend_data self.data.get_depend_key(row)print(depend_data) #depend_data打印数据value[0].biz#执行依赖case返回结果response_data self.run_dependent()# print(depend_data)# print(response_data)return [match.value for match in parse(depend_data).find(response_data)][0] 再将value[0].biz值放入test_04请求数据qqmusic_more中的supplier字段中 if depend_case ! None:self.depend_data DependentData(depend_case)#获取依赖字段的响应数据depend_response_data self.depend_data.get_value_for_key(i)#获取请求依赖的keydepend_key self.data.get_depend_field(i)#将依赖case的响应返回中某个字段的value赋值给该接口请求中某个参数data[depend_key] depend_response_data 4拿到请求相关数据后执行该条case获取response然后实际结果与预期结果进行断言 res self.run_method.run_main(method,url,data,header,paramsdata)get请求参数是params:request.get(url,params{}),post请求数据是data:request.post(url,data{}) excel文件中没有区分直接用请求数据表示,则data self.data.get_data_value(i)拿到的数据post请求就是datadata,get请就是paramsdata根据get、post类型区分 class RunMethod:def post_main(self,url,data,headerNone):res Noneif header ! None:res requests.post(urlurl,datadata,headersheader)else:res requests.post(urlurl,datadata)return res.json()def get_main(self,url,paramsNone,headerNone):res Noneif header ! None:res requests.get(urlurl, paramsparams, headersheader)else:res requests.get(urlurl, paramsparams)return res.json()def run_main(self,method,url,dataNone,headerNone,paramsNone):res Noneif method post:res self.post_main(url,data,header)else:res self.get_main(url,params,header)return res 5执行接口case过程中可能存在某条case异常报错导致下面的case无法运行所以我们既要将异常日志存放在特定文件中方便后续排查也要保证下面的case能够不受影响继续执行完 try:...except Exception as e:# 将报错写入指定路径的日志文件里with open(log_file,a,encodingutf-8) as f:f.write(\n第%s条用例报错:\n % i)initLogging(log_file,e)fail_count.append(i) 抓取日志的方法可以使用python内置模块logging具体用法可以参考https://www.cnblogs.com/shapeL/p/9174303.html import loggingdef initLogging(logFilename,e):logging.basicConfig(level logging.INFO,format %(asctime)s-%(levelname)s-%(message)s,datefmt %y-%m-%d %H:%M,filename logFilename,filemode a)fh logging.FileHandler(logFilename,encodingutf-8)logging.getLogger().addHandler(fh)log logging.exception(e)return log 日志文件log.txt结果直接定位问题出在哪儿 第5条用例报错: 18-06-19 10:27-ERROR-string indices must be integers Traceback (most recent call last):File C:/Users/xxx/Documents/GitHub/python3_interface/main/run_test.py, line 70, in go_on_runop_header.write_cookie()File C:\Users\xxx\Documents\GitHub\python3_interface\util\operation_header.py, line 30, in write_cookiecookie requests.utils.dict_from_cookiejar(self.get_cookie())File C:\Users\zhangying1\Documents\GitHub\python3_interface\util\operation_header.py, line 25, in get_cookieurl self.get_response_url()callbackjQuery21008240514814031887_1508666806688_1508666806689File C:\Users\xxx\Documents\GitHub\python3_interface\util\operation_header.py, line 18, in get_response_urlurl self.response[data][url][0] TypeError: string indices must be integers 6接口自动化测试执行完成后需要将测试结果发送给项目组相关人员邮件发送实现方法参考https://www.cnblogs.com/shapeL/p/9115887.html self.send_mail.send_main(pass_count,fail_count,no_run_count) #coding:utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import datetimeclass SendEmail:global send_userglobal email_hostglobal passwordpassword lunkbrgwqxhfjgxxemail_host smtp.qq.comsend_user xxxqq.comdef send_mail(self,user_list,sub,content):user shape send_user # 创建一个带附件的实例message MIMEMultipart()message[Subject] submessage[From] usermessage[To] ;.join(user_list)# 邮件正文内容message.attach(MIMEText(content, plain, utf-8))# 构造附件附件为txt格式的文本filename ../log/log.txttime datetime.date.today()att MIMEText(open(filename, rb).read(), base64, utf-8)att[Content-Type] application/octet-streamatt[Content-Disposition] attachment; filename%s_Log.txt% timemessage.attach(att)server smtplib.SMTP_SSL()server.connect(email_host,465)# 启用SSL发信, 端口一般是465# server.set_debuglevel(1)# 打印出和SMTP服务器交互的所有信息server.login(send_user,password)server.sendmail(user,user_list,message.as_string())server.close()def send_main(self,pass_list,fail_list,no_run_list):pass_num len(pass_list)fail_num len(fail_list)#未执行的用例no_run_num len(no_run_list)count_num pass_num fail_num no_run_num#成功率、失败率用%对字符串进行格式化%d 格式化整数%f 格式化小数想保留两位小数需要在f前面加上条件%.2f用%%来表示一个%如果你不太确定应该用什么%s永远起作用它会把任何数据类型转换为字符串 pass_result %.2f%% % (pass_num/count_num*100)fail_result %.2f%% % (fail_num/count_num*100)no_run_result %.2f%% % (no_run_num/count_num*100)user_list [xxxqq.com]sub 接口自动化测试报告content 接口自动化测试结果:\n通过个数%s个失败个数%s个未执行个数%s个通过率为%s失败率为%s未执行率为%s\n日志见附件 % (pass_num,fail_num,no_run_num,pass_result,fail_result,no_run_result)self.send_mail(user_list,sub,content) 最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 软件测试面试小程序 被百万人刷爆的软件测试题库谁用谁知道全网最全面试刷题小程序手机就可以刷题地铁上公交上卷起来 涵盖以下这些面试题板块 1、软件测试基础理论 2、web,app接口功能测试 3、网络 4、数据库 5、linux 6、web,app接口自动化 7、性能测试 8、编程基础9、hr面试题 10、开放性测试题11、安全测试12、计算机基础 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你
http://www.pierceye.com/news/184987/

相关文章:

  • 大竹网站建设泗阳城乡建设局网站
  • 山东省住房和城乡建设厅服务网站做网站的注意点
  • 网站排名优化软件江西网站备案要求
  • 桐柏县建设局网站邢台建设局网站
  • 网站域名变更怎么查英国做网站的人
  • 嘉兴公司的网站设计wordpress 送女友
  • 10个免费的黑科技网站电子元器件商城网站建设
  • 动画型网站做免费推广的平台
  • 购物网站怎么创建深圳地区5g微波网站建设计划
  • 安做省民改厅网站网站带支付模板
  • 做什么网站吸引人建设网站模板
  • 微信官网网站模板京东云网站建设
  • python 网站开发 前端利用vps做网站
  • 网站做下载功能南昌专业做网站的
  • 白山网站设计网站首页鲁大师
  • 网站怎样和首页做链接地址七星彩的网站怎么做的
  • 深圳h5模板建站wordpress 整合ucenter
  • 企业网站策划书下载google adsense
  • 安徽网站建设公司排名竞价托管就选微竞价
  • 笑话小网站模板html做移动网站快速排
  • c2c电子商务网站有哪些电商设计师和美工有什么区别
  • 长春电商网站建设价格低公司网站过期未续费会怎样
  • 农业综合管理网站建设做网站前期工作
  • 域名更换网站网站维护工作内容
  • 网站水印设置作教程长沙求职网招聘网
  • 八年级微机网站怎么做wordpress 链接转换
  • ppt做的模板下载网站有哪些内容wordpress 4.5.3中
  • 网站开发需求文档prd模板iis wordpress 404
  • 灰色链网站建设偃师建网站那家公司好
  • 文化网站前置审批网站运营系统