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等技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.页面跳转行为.购物行为.广告点击行为等)进行复杂的分析.用统计分 ...
随机推荐
- linux配置词典goldendict
在mint 18下使用通过, ubuntu 类似. 方法: 通过软件中心安装goldendict,或者 sudo apt install goldendict 通过网页抓取程序, 见附录 下载朗道词典 ...
- Tensorflow学习教程------lenet多标签分类
本文在上篇的基础上利用lenet进行多标签分类.五个分类标准,每个标准分两类.实际来说,本文所介绍的多标签分类属于多任务学习中的联合训练,具体代码如下. #coding:utf-8 import te ...
- mybatis自动扫描的时候,接口跟xml文件的名字最好能够一一对应
事实证明这是十分有好处的,当然,即便你不这么做,它也不一定会报invalid bound statement (not found),因为你不知道从哪儿拷来的配置文件可能从其他的地方做了配置,但是这么 ...
- 2019CSP-J游记
2019-10-19:开一个坑,今天初赛,我是我们考场唯一几个坚持到16:45收卷的人,我们是机试,竟然可以用编译器. 这次初赛总体感觉打得不错,卷面满分200,最后实际分数,就是卷面分除以二. 初赛 ...
- 吴裕雄--天生自然 JAVA开发学习:抽象类
public abstract class Employee { private String name; private String address; private int number; pu ...
- 在拖放文件的同时检测shift键的状态
老板要给原来文件拖放的功能加个扩展分类,于是想在文件拖放时判断shift键的状态来区分. 一般通过keydown和keyup来判断按下与否,但这都是需要控件事件触发,而在拖放的时候是没法触发key事件 ...
- vue 项目在scope中使用@import引入css ,作用域是全局
有时候引入第三ui插件,修改样式 时候,需要再单独定义style标签,才有效果,可是会影响全局影响全局,如下所示 加上/deep/,就可以了,
- Python访问Amazon官网异常
使用Python访问亚马逊(Amazon)官网,如果没有将headers更改为浏览器的信息, 有几率会触发:检测到当前可能是自动程序,需要输入验证码: 将header修改成浏览器后,需要等一段时间或者 ...
- k-means|k-mode|k-prototype|PAM|AGNES|DIANA|Hierarchical cluster|DA|VIF|
聚类算法: 对于数值变量,k-means eg:k=4,则选出不在原数据中的4个点,计算图形中每个点到这四个点之间的距离,距离最近的便是属于那一类.标准化之后便没有单位差异了,就可以相互比较. 对于分 ...
- Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplicated"}的解决方法
左侧菜单栏时,发现点击路由跳转相同地址 会有这个报错 Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplic ...