# 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的更多相关文章

  1. 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 ...

  2. unittest(22)- p2p项目实战(4)-read_config

    # 4. read_config.py import configparser class ReadConfig: @staticmethod def get_config(file_path, se ...

  3. unittest(22)- p2p项目实战(3)-project_path

    # 3. project_path.py # 用来读取文件的路径 import os # os.path.split(path)使用: # 1.path如果是具体到文件名,则返回最后层级的文件,和文件 ...

  4. unittest(22)- p2p项目实战(2)-http_request

    # 2. http_request.py import requests from learn_logging_5.write_log_class import MyLog my_logger = M ...

  5. selenium3 web自动化测试框架 四:Unittest介绍及项目实战中的运用

    unittest介绍及运用,可以参考之前写的文章,除了未结合web自动化演示,基础知识都有了 https://www.cnblogs.com/wuzhiming/p/8858305.html unit ...

  6. 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝

    移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌)  说到APP自动化测试,Appium可是说是非常流 ...

  7. angularJs项目实战!02:前端的页面分解与组装

    自从上一篇文章到现在已经有将近一个月的时间,我将精力放在了前端页面分解与组装,和angularjs如何与jquery.bootstrap.D3等一系列其他类库结合使用的经验总结上.由于公司新招了一些员 ...

  8. angularJs项目实战!01:模块划分和目录组织

    近日来我有幸主导了一个典型的web app开发.该项目从产品层次来说是个典型的CRUD应用,故而我毫不犹豫地采用了grunt + boilerplate + angularjs + bootstrap ...

  9. Spark大型项目实战:电商用户行为分析大数据平台

    本项目主要讲解了一套应用于互联网电商企业中,使用Java.Spark等技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.页面跳转行为.购物行为.广告点击行为等)进行复杂的分析.用统计分 ...

随机推荐

  1. Juniper srx新增接口IP,使PC直连srx(转)

    转自:https://www.jianshu.com/p/bc27134bde3d Juniper srx新增接口IP,使PC直连srx 2018.11.19 14:24:15字数 424 概述 需求 ...

  2. 吴裕雄--天生自然 JAVA开发学习:变量类型

    public class Variable{ static int allClicks=0; // 类变量 String str="hello world"; // 实例变量 pu ...

  3. PAT Basic 1043 输出PATest (20分)[Hash散列]

    题目 给定⼀个⻓度不超过10000的.仅由英⽂字⺟构成的字符串.请将字符重新调整顺序,按"PATestPATest-."这样的顺序输出,并忽略其它字符.当然,六种字符的个数不⼀定是 ...

  4. SpringBoot 2.2.2集成ElasticSearch 7.5.1

    前言:现在公司有一个项目要用到检索功能,检索上面现在最常用的是Solr/ES,最后经过对比选择了ElasticSearch开源组件包,因为这个是公司的一个产品项目,技术版本当然要用最新的啦,最后完全确 ...

  5. ant design for vue select 数据回显问题

    例如: 想要回显id为1的温度, 结果直接在select框中显示了1,而不是选中了温度, 此时因为select中的value是string类型, 而我们设置的id是number类型, 对应不上, 所以 ...

  6. Window RabbitMq安装

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...

  7. 小白学习之pytorch框架(5)-多层感知机(MLP)-(tensor、variable、计算图、ReLU()、sigmoid()、tanh())

    先记录一下一开始学习torch时未曾记录(也未好好弄懂哈)导致又忘记了的tensor.variable.计算图 计算图 计算图直白的来说,就是数学公式(也叫模型)用图表示,这个图即计算图.借用 htt ...

  8. JavaScript学习笔记 - 进阶篇(5)- 事件响应

    什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单击 ...

  9. C/S 和 B/S架构

    C/S 和 B/S架构 一.单机架构 应用领域: 植物大战僵尸 office 二.C/S架构 [ 应用领域: QQ 大型网络游戏 计算机发展初期用户去取数据,直接就去主机拿,从这里开始就分出了客户端和 ...

  10. 深度学习数据集MNIST ImageNet COCO PASCAL VOC介绍

    参考文档 深度学习数据集汇总介绍 1.  MNIST 深度学习领域的“Hello World!”,入门必备!MNIST是一个手写数字数据库,它有60000个训练样本集和10000个测试样本集,每个样本 ...