unittest(22)- p2p项目实战(8)-test_class_auto_incre
# 8.test_class_auto_incre # 使用ddt import requests import unittest from p2p_project_7.tools.http_request import HttpRequest from p2p_project_7.tools.get_data import GetData from p2p_project_7.tools.do_excel_auto_incre_by_fanshe_2 import DoExcel from p2p_project_7.tools import project_path from p2p_project_7.tools.do_mysql_class import DoMysql from p2p_project_7.tools.write_log_class import MyLog from ddt import ddt, data test_data = DoExcel().get_data(project_path.test_case_path) my_logger = MyLog() @ddt class TestLogin(unittest.TestCase): def setUp(self): print("start testing...") def tearDown(self): print("case end.") @data(*test_data) def test_api(self, item): # print("self.method: {}, type:{}".format(self.method, type(self.method))) # print("self.data: {}".format(self.data)) # print("cookie是:", GetCookie.Cookie) # 替换loan_id my_logger.info("开始执行用例{0}:{1}".format(item["case_id"], item["tittle"])) if item["data"]["id"].find("${loan_id}") != -1: # 在数据库中根据借款人账号找到标id,使用max是因为如果测试账号,可能有多个人同时使用用来加标 query_sql = "select max(Id) from loan where MemberID={0}".format(getattr(GetData, "loan_member_id")) loan_id = DoMysql().do_mysql(query_sql)[0][0] item["data"] = item["data"].replace("${loan_id}", str(loan_id)) # 把标id的值存到反射,也可以不存,不使用反射,每次都直接在数据库中取值; # 使用反射的原因是多个人用同一个账号进行加标,不能保证每次取到的都是自己加的那个标,所以用反射把自己加的标id存起来 setattr(GetData, "LoanId", loan_id) my_logger.info("标id是:{0}".format(loan_id)) else: # loan_id有值的话就直接使用反射进行替换 my_logger.info("标id是:{0}".format(getattr(GetData, "LoanId"))) item["data"] = item["data"].replace("${loan_id}", str(getattr(GetData, "LoanId"))) my_logger.info("获取到的请求数据是:{0}".format(item["data"])) my_logger.info("----------------开始接口请求-----------------") if item["sheet_name"] in getattr(GetData, "check_list"): # 充值请求之前查询余额 # 查询数据库 query_sql = "select LeaveAmount from member where mobile={0}".format(item["data"]["mobile"]) BeforeAmount = DoMysql().do_mysql(query_sql, 1)[0] res = HttpRequest().http_request(item["url"], item["method"], item["data"], cookie=GetData.Cookie) # 充值请求之后校验余额 query_sql = "select LeaveAmount from member where mobile={0}".format(item["data"]["mobile"]) AfterAmount = DoMysql().do_mysql(query_sql, 1)[0] # 61-64 行代码:不是所有的用例都这么检查,因为有的用例不涉及充值,优化做法是在excel中定义好哪些用例需要查余额 if abs(BeforeAmount - AfterAmount) == eval(item["data"])["amount"]: check_res = "金额正确" else: check_res = "金额不对" # print("哪出错了") # print(res.text) r = res.json()["errorCode"] # 如果GetCookie.Cookie没有值,就把响应的cookie值赋给GetCookie.Cookie,以便下次请求使用 if GetData.Cookie is None: setattr(GetData, "Cookie", res.cookies) # 如果GetCookie.Cookie不为空,就把新获得的res.cookies添加到原有的cookie中 else: GetData.Cookie.update(res.cookies) try: self.assertEqual(r, item["expected"]) test_result = "PASS" # 用例成功 except AssertionError as e: test_result = "FAILED" # 用例失败 print("there is an error: {}".format(e)) raise e # 无论是否异常,finally后面都要执行。这里是写入响应结果和测试结论 finally: DoExcel().write_back(project_path.test_case_path, item["sheet_name"], item["case_id"] + 1, str(res.json()), test_result) print(res.json())
配置文件:
测试数据:
对需要检查余额的用例写入SQL语句:
unittest(22)- p2p项目实战(8)-test_class_auto_incre的更多相关文章
- unittest(22)- p2p项目实战(7)-do_mysql
# 7. do_msql.py import mysql.connector from p2p_project_2020_1_21.tools import project_path from p2p ...
- unittest(22)- p2p项目实战(4)-read_config
# 4. read_config.py import configparser class ReadConfig: @staticmethod def get_config(file_path, se ...
- unittest(22)- p2p项目实战(3)-project_path
# 3. project_path.py # 用来读取文件的路径 import os # os.path.split(path)使用: # 1.path如果是具体到文件名,则返回最后层级的文件,和文件 ...
- unittest(22)- p2p项目实战(2)-http_request
# 2. http_request.py import requests from learn_logging_5.write_log_class import MyLog my_logger = M ...
- selenium3 web自动化测试框架 四:Unittest介绍及项目实战中的运用
unittest介绍及运用,可以参考之前写的文章,除了未结合web自动化演示,基础知识都有了 https://www.cnblogs.com/wuzhiming/p/8858305.html unit ...
- 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝
移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 说到APP自动化测试,Appium可是说是非常流 ...
- angularJs项目实战!02:前端的页面分解与组装
自从上一篇文章到现在已经有将近一个月的时间,我将精力放在了前端页面分解与组装,和angularjs如何与jquery.bootstrap.D3等一系列其他类库结合使用的经验总结上.由于公司新招了一些员 ...
- angularJs项目实战!01:模块划分和目录组织
近日来我有幸主导了一个典型的web app开发.该项目从产品层次来说是个典型的CRUD应用,故而我毫不犹豫地采用了grunt + boilerplate + angularjs + bootstrap ...
- Spark大型项目实战:电商用户行为分析大数据平台
本项目主要讲解了一套应用于互联网电商企业中,使用Java.Spark等技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.页面跳转行为.购物行为.广告点击行为等)进行复杂的分析.用统计分 ...
随机推荐
- webview Java与JS互调
Android调用JS:方法一 webView.loadUrl("javascript:show('"+info+"')"); Android调用JS:方法二 ...
- Python KNN 学习曲线
学习曲线的目的是选择更好的模型参数.以最近邻算法为例,选取最近的多少个数据点,才能达到最优.可以控制训练集不动,调整最近的点的个数,绘制学习曲线. import matplotlib.pyplot a ...
- Python的IDE之Pycharm的使用
Python的IDE之Pycharm的使用 一.为什么用IDE(Python集成开发环境-Pycharm) 到现在为止,我们也是写过代码的人啦,但你有没有发现,每次写代码要新建文件.写完保存时还要选择 ...
- Python笔记_第三篇_面向对象_7.多态
1. 多态的概念 多态:一种事物的多种形态.其表现形式就是连续的继承关系. 还以人喂食动物的例子.最终目标是人可以喂食任何一种动物.如果人要喂食100多种动物,难道要写100中方法吗?多态就是把属性和 ...
- Hibernate(四)--延迟加载(lazyload)
hibernate中的延迟加载(lazyload)分属性的延迟加载和关系的延迟加载 属性的延迟加载: 当使用load的方式来获取对象的时候,只有访问了这个对象的属性,hibernate才会到数据库中进 ...
- zabbix3.4--配置微信告警
1.注册企业微信 https://work.weixin.qq.com/ 2.注册好后登陆,点击“我的企业”,记录企业ID. 3.点击“应用管理”--“创建应用”,创建应用时添加接收告警的用户 4.添 ...
- 机器学习总结(参考源码ml.hpp)
依据机器学习算法如何学习数据可分为3类: 有监督学习:从有标签的数据学习,得到模型参数,对测试数据正确分类: 无监督学习:没有标签,计算机自己寻找输入数据可能的模型: 强化学习(reinforceme ...
- winform把所有dll打包成一个exe
大家都知道做winform开发,是可以利用visual studio进行打包的,但是这种打包的方式需要双击安装,那么有没有什么方法,可以把winform程序打包成绿色版呢?当然,这里的“绿色版”也是相 ...
- 蓝桥杯练习Day 2
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...
- TPO9-2Reflection in Teaching
Teachers, it is thought, benefit from the practice of reflection, the conscious act of thinking deep ...