def setUp(self) -> None:
     # 实例化
     self.req = RequestHandler()
     # 一次操作用的是一个db对象,所以放前置条件当中
     self.db = DBhandler(host=yaml_data["database"]["host"],
                         port=yaml_data["database"]["port"],
                         password=yaml_data["database"]["password"],
                         user=yaml_data["database"]["user"],
                         charset=yaml_data["database"]["charset"],
                         database=yaml_data["database"]["database"])
Exemple #2
0
 def loan_id(self):
     """查询数据库,得到loan_id,临时变量保存到Context
     return 返回loan表中id, loan只会从数据库中查询第一条状态为2的数据"""
     db = DBhandler(host=yaml_data["database"]["host"],
                    port=yaml_data["database"]["port"],
                    password=yaml_data["database"]["password"],
                    user=yaml_data["database"]["user"],
                    charset=yaml_data["database"]["charset"],
                    database=yaml_data["database"]["database"])
     loan = db.query("select * from loan where status=%s limit 100;",
                     args=[2])
     db.close()
     return loan["id"]
class TestInvest(unittest.TestCase):
    # 读取Excel里数据
    excel_handler = ExcelHandler(config.data_path)
    data = excel_handler.total_test("invest")
    logger = LoggerHandler(
        name=yaml_data["logger"]["name"],
        level=yaml_data["logger"]["level"],
        file=yaml_data["logger"]["file"],
    )

    def setUp(self) -> None:
        # 实例化
        self.req = RequestHandler()
        # 一次操作用的是一个db对象,所以放前置条件当中
        self.db = DBhandler(host=yaml_data["database"]["host"],
                            port=yaml_data["database"]["port"],
                            password=yaml_data["database"]["password"],
                            user=yaml_data["database"]["user"],
                            charset=yaml_data["database"]["charset"],
                            database=yaml_data["database"]["database"])
        # 登录
        # save_token()
        # self.token=Context.token
        # self.member_id=Context.member_id

    def tearDown(self) -> None:
        # 关闭浏览器
        self.req.close_session()
        self.db.close()

    @ddt.data(*data)
    def test_invest(self, test_data):
        # 获取member_id token  loan_id
        member_id = Context().member_id
        token = Context().token
        loan_id = Context().loan_id
        # 从数据库中查找id用户的原可用余额
        sql = "select * from member where id=%s;"
        user = self.db.query(sql, args=[member_id])
        before_money = user["leave_amount"]
        # 替换,把Excel里#member_id#  #loan_id# 替换成对应的id
        test_data["json"] = replace_label(test_data["json"])
        print(test_data)

        # if "%amount%" in test_data["json"]:
        #     test_data["json"]=test_data["json"].replace("%amount%",str(before_money+Decimal(100)))
        #
        # if "*amount*" in test_data["json"]:
        #     test_data["json"]=test_data["json"].replace("*amount*",str(before_money+Decimal(100)))
        if "*other_loan_id*" in test_data["json"]:
            oth_loan = self.db.query(
                "select * from loan where id=%s limit 100;", args=[1])
            test_data["json"] = test_data["json"].replace(
                "*other_loan_id*", str(oth_loan))

        headers = json.loads(test_data["headers"])
        headers["Authorization"] = token
        res = self.req.visit(test_data["method"],
                             config.host + test_data["url"],
                             json=json.loads(test_data["json"]),
                             headers=headers)
        print(res)

        try:
            self.assertEqual(test_data["expected"], res["code"])
            #  数据库断言
            if res["code"] == 0:
                money = json.loads(test_data["json"])["amount"]
                sql = "select * from member where id=%s;"
                after_user = self.db.query(sql, args=[member_id])
                after_money = after_user["leave_amount"]
                self.assertEqual(before_money - Decimal(money), after_money)

            # 写入Excel 中实际结果
            self.excel_handler.write_cell("invest", config.data_path,
                                          test_data["case_id"] + 1, 9, "用例通过")

        except AssertionError as e:
            # 记录logger
            self.logger.error("测试用例失败".format(e))
            # 手动抛出异常,否则测试用例会自动通过,写入Excel
            self.excel_handler.write_cell("invest", config.data_path,
                                          test_data["case_id"] + 1, 9, "用例失败")
            raise e
Exemple #4
0
class TestRecharge(unittest.TestCase):
    # def setUp(self) -> None:
    # 读取Excel里数据
    excel_handler = ExcelHandler(config.data_path)
    data = excel_handler.total_test("recharge")
    # 读取yaml里的数据
    # yaml_data =YamlHandler(config.yaml_config_path).yaml_read()
    logger = LoggerHandler(
        name=yaml_data["logger"]["name"],
        level=yaml_data["logger"]["level"],
        file=yaml_data["logger"]["file"],
    )

    def setUp(self) -> None:
        # 实例化
        self.req = RequestHandler()
        # 一次操作用的是一个db对象,所以放前置条件当中
        self.db = DBhandler(host=yaml_data["database"]["host"],
                            port=yaml_data["database"]["port"],
                            password=yaml_data["database"]["password"],
                            user=yaml_data["database"]["user"],
                            charset=yaml_data["database"]["charset"],
                            database=yaml_data["database"]["database"])
        # 登录
        # save_token()
        # self.token=Context.token
        # self.member_id=Context.member_id

    def tearDown(self) -> None:
        # 关闭浏览器
        self.req.close_session()
        self.db.close()

    @ddt.data(*data)
    def test_recharge(self, test_data):
        """充值接口
        1、替换json数据当中member_id
        2、访问接口,得到实际结果
        3、断言实际结果,同时需要查数据库里面充值金额是否正确"""
        # 进行充值时候member_id是动态变化的,amount是规定好的可以写死,headers里需要用登陆时候返回的token:
        # 处理token第一种:在Excel里的headers里,用## 动态生成,然后用replace替换;第二种是在前置条件登陆中拿到token,然后再发送requests请求中的headers上拼接上token
        # 充值之前,查询数据库,获取充值之前的余额
        member_id = Context().member_id
        token = Context().token

        sql = "select * from member where id=%s;"
        user = self.db.query(sql, args=[member_id])
        before_money = user["leave_amount"]

        if "#member_id#" in test_data["json"]:
            test_data["json"] = test_data["json"].replace(
                "#member_id#", str(member_id))
        # 错误的用户名用例,只要不要等于当前登录的id就行,可以id+1 +2 都行
        if "#other_id#" in test_data["json"]:
            test_data["json"] = test_data["json"].replace(
                "#other_id#", str(member_id + 1))
        # 读取Excel中headers,这个得到的是字典
        headers = json.loads(test_data["headers"])
        # 得到Authorization信息头
        headers["Authorization"] = token
        res = self.req.visit(test_data["method"],
                             config.host + test_data["url"],
                             json=json.loads(test_data["json"]),
                             headers=headers)
        print(res)

        # 获得expected,然后断言
        try:
            self.assertEqual(test_data["expected"], res["code"])
            # 第二次断言,充值成功的用例需要进行数据库校验,金额
            # 判断是否为成功用例,通过返回码判断,如果没有code可以用msg 或者在Excel新增一列tag ,success
            if res["code"] == 0:
                # 查看数据库结果,充值之前的金额+ 充值的金额=充值后的金额
                money = json.loads(test_data["json"])["amount"]
                # 获取充值之前的金额:第一种办法是通过save_token返回的leave_amount,这个方法如果是多次充值的时候,会获取失败,为此应该把save_token()放前置条件中,保证每次用例之前都获取一次

                sql = "select * from member where id=%s;"
                after_user = self.db.query(sql, args=[member_id])
                after_money = after_user["leave_amount"]
                self.assertEqual(before_money + Decimal(money), after_money)

            # 写入Excel 中实际结果
            self.excel_handler.write_cell("recharge", config.data_path,
                                          test_data["case_id"] + 1, 9, "用例通过")
        except AssertionError as e:
            # 记录logger
            self.logger.error("测试用例失败".format(e))
            # 手动抛出异常,否则测试用例会自动通过,写入Excel
            self.excel_handler.write_cell("recharge", config.data_path,
                                          test_data["case_id"] + 1, 9, "用例失败")
            raise e
class TestRegister(unittest.TestCase):
    # def setUp(self) -> None:
    # 读取Excel里数据
    excel_handler = ExcelHandler(config.data_path)
    data = excel_handler.total_test("register")
    # 读取yaml里的数据

    logger = LoggerHandler(
        name=yaml_data["logger"]["name"],
        level=yaml_data["logger"]["level"],
        file=yaml_data["logger"]["file"],
    )

    def setUp(self) -> None:
        # 实例化
        self.req = RequestHandler()
        # 一次操作用的是一个db对象,所以放前置条件当中
        self.db = DBhandler(host=yaml_data["database"]["host"],
                            port=yaml_data["database"]["port"],
                            password=yaml_data["database"]["password"],
                            user=yaml_data["database"]["user"],
                            charset=yaml_data["database"]["charset"],
                            database=yaml_data["database"]["database"])

    def tearDown(self) -> None:
        # 关闭浏览器
        self.req.close_session()
        self.db.close()

    @ddt.data(*data)
    def test_register(self, test_data):
        print(test_data)
        # 先判断test_data["json"]里如果出现了#exist# 就使用get_mobile随机生成手机号码
        # 查询数据库,如果数据库存在该号码,就使用整个号码,但是整个存在的概率很低,查询不到这个号码,那么Excel中这个用例就有问题
        # 所以先不生成手机号码,先随机从数据库中拿一个已经存在的号码,直接使用该号码替换
        # 然后再用replace替换"#exist#"
        if "#exist#" in test_data["json"]:
            mobile = self.db.query("select * from member limit 1 ;")
            # 判断:如果从数据库中能查到一条记录就替换,如果数据库是空数据库就会执行else
            # 上面的mobile得到的是一个字典,我们需要的是字典里的mobile_phone值
            if mobile:
                # 注意replace替换的一定是一个字符串,如果是数字需要转化
                test_data["json"] = test_data["json"].replace(
                    "#exist#", mobile["mobile_phone"])
            else:
                # 随机生成一个 13311112222,如果在库中还是不存在这条用例就会不通过
                # 解决办法:写个注册成功步骤,放到help函数当中,直接调用对应的方法进行注册
                # 先随机生成一个手机号码然后去用request发送注册成功的请求,或者通过db对象往数据库中插入一个手机号码也行,但是不提倡
                pass

        if "#new#" in test_data["json"]:
            # 先判断test_data["json"]里如果出现了#new# 就使用get_mobile随机生成手机号码
            # 查询数据库,如果数据库存在该号码,就再随机生成一个新号码,直到数据库中不存在为止
            while True:
                mobilephone = get_mobile()
                mobile = self.db.query(
                    "select * from member where mobile_phone=%s;",
                    args=[mobilephone])
                # 判断:如果随机生成的号码在数据库中就再次循环随机生成一个号码,如果随机生成的号码不在数据库就跳出循环,执行后面的替换语句
                if not mobile:
                    break
            test_data["json"] = test_data["json"].replace("#new#", mobilephone)

        # 访问接口,得到实际结果,res返回的是字典类型,Python里字典,json在Python里是字符串的形式
        res = self.req.visit(test_data["method"],
                             config.host + test_data["url"],
                             json=json.loads(test_data["json"]),
                             headers=json.loads(test_data["headers"]))
        # 获得expected,然后断言
        try:
            self.assertEqual(test_data["expected"], res["code"])
            # 写入Excel 中实际结果
            a = self.excel_handler.write_cell("register", config.data_path,
                                              test_data["case_id"] + 1, 9,
                                              "用例通过")
            print(a)

        except AssertionError as e:
            # 记录logger
            self.logger.error("测试用例失败".format(e))
            # 手动抛出异常,否则测试用例会自动通过,写入Excel
            self.excel_handler.write_cell("register", config.data_path,
                                          test_data["case_id"] + 1, 9, "用例失败")
            raise e
class TestLogin(unittest.TestCase):
    # def setUp(self) -> None:
    # 读取Excel里数据
    excel_handler=ExcelHandler(config.data_path)
    data=excel_handler.total_test("login")
    # 读取yaml里的数据
    # yaml_data =YamlHandler(config.yaml_config_path).yaml_read()
    logger=LoggerHandler(name=yaml_data["logger"]["name"],
                 level=yaml_data["logger"]["level"],
                 file=yaml_data["logger"]["file"],)

    def setUp(self) -> None:
        # 实例化
        self.req=RequestHandler()
        # 一次操作用的是一个db对象,所以放前置条件当中
        self.db=DBhandler(host=yaml_data["database"]["host"],
                 port=yaml_data["database"]["port"],
                 password=yaml_data["database"]["password"],
                 user=yaml_data["database"]["user"],
                 charset=yaml_data["database"]["charset"],
                 database=yaml_data["database"]["database"])

    def tearDown(self) -> None:
        # 关闭浏览器
        self.req.close_session()
        self.db.close()
    @ddt.data(*data)
    def test_login(self,test_data):
        print(test_data)
        # if "#exist#" in test_data["json"]:
        #     # 如果是一个已经存在的手机号码,就直接拿数据库的一个号码,然后登陆成功
        #     mobile=self.db.query("select * from member limit 1;")
        #     print(mobile)
        #     test_data["json"]=test_data["json"].replace("#exist#",mobile["mobile_phone"])
        #     test_data["json"]=test_data["json"].replace("#existpwd#",mobile["pwd"])
        #     print(test_data)

        if "#not exist#" in test_data["json"]:
            while True:
                mobilephone = get_mobile()
                mobile=self.db.query("select * from member where mobile_phone=%s;",args=[mobilephone])
                if not  mobile:
                    break
            test_data["json"]=test_data["json"].replace("#not exist#",mobilephone)

        res=self.req.visit(test_data["method"],
                            config.host+test_data["url"],
                            json=json.loads(test_data["json"]),
                            headers=json.loads(test_data["headers"]))
        print(res)


        # 获得expected,然后断言
        try:
            self.assertEqual(test_data["expected"],res["code"])
            # 写入Excel 中实际结果
            self.excel_handler.write_cell("login",config.data_path,test_data["case_id"]+1,9,"用例通过")
        except AssertionError as e:
            # 记录logger
            self.logger.error("测试用例失败".format(e))
            # 手动抛出异常,否则测试用例会自动通过,写入Excel
            self.excel_handler.write_cell("login",config.data_path,test_data["case_id"]+1,9,"用例失败")
            raise e
Exemple #7
0
class TestWithdraw(unittest.TestCase):
    # 读取Excel里数据
    excel_handler = ExcelHandler(config.data_path)
    data = excel_handler.total_test("withdraw")
    logger = LoggerHandler(
        name=yaml_data["logger"]["name"],
        level=yaml_data["logger"]["level"],
        file=yaml_data["logger"]["file"],
    )

    def setUp(self) -> None:
        # 实例化
        self.req = RequestHandler()
        # 一次操作用的是一个db对象,所以放前置条件当中
        self.db = DBhandler(host=yaml_data["database"]["host"],
                            port=yaml_data["database"]["port"],
                            password=yaml_data["database"]["password"],
                            user=yaml_data["database"]["user"],
                            charset=yaml_data["database"]["charset"],
                            database=yaml_data["database"]["database"])
        # # 登录
        # save_token()
        # self.token=Context.token
        # self.member_id=Context.member_id

    def tearDown(self) -> None:
        # 关闭浏览器
        self.req.close_session()
        self.db.close()

    @ddt.data(*data)
    def test_withdraw(self, test_data):
        """"提现接口
        1、替换json数据当中member_id
        2、访问接口,得到实际结果
        3、断言实际结果,同时需要查数据库里面提现后金额是否正确"""
        member_id = Context().member_id
        token = Context().token
        sql = "select * from member where id=%s;"
        user = self.db.query(sql, args=[member_id])
        before_money = user["leave_amount"]
        if "*member_id*" in test_data["json"]:
            test_data["json"] = test_data["json"].replace(
                "*member_id*", str(member_id))

        if "*other_id*" in test_data["json"]:
            test_data["json"] = test_data["json"].replace(
                "*member_id*", str(member_id + 1))

        if "#amount#" in test_data["json"]:
            test_data["json"] = test_data["json"].replace(
                "#amount#", str(before_money + Decimal(100)))

        headers = json.loads(test_data["headers"])
        headers["Authorization"] = token
        res = self.req.visit(test_data["method"],
                             config.host + test_data["url"],
                             json=json.loads(test_data["json"]),
                             headers=headers)

        try:
            self.assertEqual(test_data["expected"], res["code"])
            #  数据库断言
            if res["code"] == 0:
                money = json.loads(test_data["json"])["amount"]
                sql = "select * from member where id=%s;"
                after_user = self.db.query(sql, args=[member_id])
                after_money = after_user["leave_amount"]
                self.assertEqual(before_money - Decimal(money), after_money)

            # 写入Excel 中实际结果
            self.excel_handler.write_cell("withdraw", config.data_path,
                                          test_data["case_id"] + 1, 9, "用例通过")

        except AssertionError as e:
            # 记录logger
            self.logger.error("测试用例失败".format(e))
            # 手动抛出异常,否则测试用例会自动通过,写入Excel
            self.excel_handler.write_cell("withdraw", config.data_path,
                                          test_data["case_id"] + 1, 9, "用例失败")
            raise e