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等技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.页面跳转行为.购物行为.广告点击行为等)进行复杂的分析.用统计分 ...
随机推荐
- 201312-1 出现次数最多的数Java
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Scanner; ...
- PAT Advanced 1070 Mooncake (25) [贪⼼算法]
题目 Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn Festival. Many typ ...
- 痢疾杆菌|SARS
病原微生物分析: Eg:痢疾杆菌 测序---比对(K12vs治病菌1vs治病菌2),发现: “毒力岛”:K12没有,两个治病菌有,缩小搜寻范围. “黑洞”:K12有,但两个治病菌没有. SARS: 构 ...
- python机器学习(1:K_means聚类算法)
一.算法介绍 K-means算法是最简单的也是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的.算法的目的是使各个样本与所在均值的误差平方和达到最小(这也是评价K-means算 ...
- python-day1 爬虫基础之HTTP基本原理
经过前几天的开发环境配置,今天终于正式开启学Python之路了,今天主要看了HTTP的基本原理,下边做一个总结: 1.首先要了解的就是URI和URL,URI的全拼是Uniform Resource I ...
- 吴裕雄--天生自然TensorFlow高层封装:使用TFLearn处理MNIST数据集实现LeNet-5模型
# 1. 通过TFLearn的API定义卷机神经网络. import tflearn import tflearn.datasets.mnist as mnist from tflearn.layer ...
- C#Web网站的创建
一.CS与BS的区别 CS软件:需要在客户端安装软件. BS软件:只需要浏览器就能运行,Web网站就是BS软件. 创建过程: 1.文件新建---新建网站----空白网站 2.右击网站项目---添加网页 ...
- Eclipse Jee 2019-12 使用的一些小窍门(积累性更新)
在安装使用 Eclipse IDE for Enterprise Java Developers Version: 2019-12 M1 (4.14.0) 之前请确保已在系统环境变量配置好JDK1. ...
- Spring IOC 和AOP
Spring是什么? Spring是一个轻量级的IoC和AOP容器框架. IOC:IOC就是控制反转,控制反转指的是把创建对象和管理对象之间的依赖关系交给了IOC容器来管理.以前new对象由程序员来控 ...
- bcp文件, 逗号文件
bcp 实用工具 https://docs.microsoft.com/zh-cn/sql/tools/bcp-utility?view=sql-server-2017 大容量复制程序实用工具 (bc ...