Exemplo n.º 1
0
    def test_login(self, test_data_cases):
        # 第一步:准备用例数据
        # 备注:列表、字典方式存储的,excel读取出来是字符串。数值类型,读取出来是数值类型的,字符串类型,读取出来是字符串类型。
        # ①拼接完整的接口地址
        url = conf.get_str("env", "url_ip") + test_data_cases["url"]
        # ②请求的方法
        method = test_data_cases["method"]
        # ③请求参数
        # 判断是否有手机号需要替换
        if "#phone#" in test_data_cases["data"]:
            # 进行替换
            test_data_cases["data"] = test_data_cases["data"].replace("#phone#", user)  # 替换完后需要接收,不然没有实质的替换
        if "#pwd#" in test_data_cases["data"]:
            # 进行替换
            test_data_cases["data"] = test_data_cases["data"].replace("#pwd#", pwd)  # 替换完后需要接收,不然没有实质的替换
        data = eval(test_data_cases["data"])

        # ④请求头
        headers = eval(conf.get_str("env", "headers"))
        # ⑤预期结果
        expected = eval(test_data_cases["expected"])
        # ⑥该用例在表单中所在行
        row = test_data_cases["case_id"] + 1
        # 第二步:发送请求到接口,获取实际结果
        response = HandleRequest().send(url=url, method=method, json=data, headers=headers)
        result = response.json()

        # 第三步:比对预期结果和实际结果
        try:
            self.assertEqual(expected["code"], result["code"])
            self.assertEqual(expected["msg"], result["msg"])
        except AssertionError as e:
            self.excel.write_data(row=row, column=8, value="未通过")  # 可以把列(column)放在配置文件里面
            # 记录没有通过的日志
            my_log.info("用例:{}------>执行未通过".format(test_data_cases["title"]))
            # 在没有通过的时候,使用print会打印在测试报告中
            print("预期结果:{}".format(expected))
            print("实际结果:{}".format(result))
            # 在没有通过的时候,将print输出到日志里面
            my_log.info("预期结果:{}".format(expected))
            my_log.info("实际结果:{}".format(result))
            raise e
        else:
            self.excel.write_data(row=row, column=8, value="通过")  # 可以把列(column)放在配置文件里面
            # 记录通过的日志
            my_log.info("用例:{}------>执行通过".format(test_data_cases["title"]))
    def test_recharge(self, test_data_cases):
        # 第一步:准备用例数据
        # 备注:列表、字典方式存储的,excel读取出来是字符串。数值类型,读取出来是数值类型的,字符串类型,读取出来是字符串类型。
        # ①拼接完整的接口地址
        url = conf.get_str("env", "url_ip") + test_data_cases["url"]
        # ②请求的方法
        method = test_data_cases["method"]

        # ③请求参数
        # 判断是否有用户id需要替换
        # if "#member_id#" in test_data_cases["data"]:
        #     # 进行替换
        #     test_data_cases["data"] = test_data_cases["data"].replace("#member_id#",
        #                                                               self.member_id)  # 替换完后需要接收,不然没有实质的替换
        test_data_cases["data"] = replace_data(
            test_data_cases["data"])  #调用replace_data方法
        data = eval(test_data_cases["data"])

        # ④请求头
        headers = eval(conf.get_str("env", "headers"))
        # 添加鉴权
        # headers["Authorization"] = self.token_data
        # 从TestData类里面获取token_data属性:两种方法
        # headers["Authorization"] = TestData.token_data#方法一:直接从TestData类里面获取token_data属性
        headers["Authorization"] = getattr(
            TestData, "token_data")  # 方法二:用getattr获取TestData类里面获取token_data属性
        # ⑤预期结果
        expected = eval(test_data_cases["expected"])
        # ⑥该用例在表单中所在行
        row = test_data_cases["case_id"] + 1

        # 第二步:发送请求到接口,获取实际结果
        if test_data_cases[
                "check_sql"]:  # 先判断用例里面check_sql字段是否有数据,如果有数据,说明需要进行数据库校验
            sql = test_data_cases["check_sql"].format(user)
            # 获取充值之前的余额
            start_money = self.db.get_one(sql)[0]

        response = HandleRequest().send(url=url,
                                        method=method,
                                        json=data,
                                        headers=headers)
        result = response.json()

        # 第三步:比对预期结果和实际结果
        try:
            self.assertEqual(expected["code"], result["code"])
            self.assertEqual(expected["msg"], result["msg"])
            # 充值后,进行数据库校验
            if test_data_cases["check_sql"]:
                sql = test_data_cases["check_sql"].format(user)
                # 获取充值之后的余额
                end_money = self.db.get_one(sql)[0]
                # 获取请求参数里面的充值金额
                recharge_money = decimal.Decimal(str(data["amount"]))
                my_log.info("充值之前金额为:{}\n,充值金额为:{}\n,充值之后金额为:{}\n".format(
                    start_money, recharge_money, end_money))
                # 进行断言
                self.assertEqual(recharge_money, end_money - start_money)
        except AssertionError as e:
            self.excel.write_data(row=row, column=8,
                                  value="未通过")  # 可以把列(column)放在配置文件里面
            # 记录没有通过的日志
            my_log.info("用例:{}------>执行未通过".format(test_data_cases["title"]))
            # 在没有通过的时候,使用print会打印在测试报告中
            print("预期结果:{}".format(expected))
            print("实际结果:{}".format(result))
            # 在没有通过的时候,将print输出到日志里面
            my_log.info("预期结果:{}".format(expected))
            my_log.info("实际结果:{}".format(result))
            raise e
        else:
            self.excel.write_data(row=row, column=8,
                                  value="通过")  # 可以把列(column)放在配置文件里面
            # 记录通过的日志
            my_log.info("用例:{}------>执行通过".format(test_data_cases["title"]))
    def test_register(self, test_data_cases):
        # 第一步:准备用例数据
        # 备注:列表、字典方式存储的,excel读取出来是字符串。数值类型,读取出来是数值类型的,字符串类型,读取出来是字符串类型。
        # ①拼接完整的接口地址
        url = conf.get_str("env", "url_ip") + test_data_cases["url"]
        # ②请求的方法
        method = test_data_cases["method"]

        # ③请求参数
        #判断是否有手机号需要替换
        if "#phone#" in test_data_cases["data"]:
            #生成一个手机号码
            phone = self.random_phone()
            #进行替换
            test_data_cases["data"] = test_data_cases["data"].replace(
                "#phone#", phone)  # 替换完后需要接收,不然没有实质的替换

        data = eval(test_data_cases["data"])
        # ④请求头
        headers = eval(conf.get_str("env", "headers"))
        # ⑤预期结果
        expected = eval(test_data_cases["expected"])
        # ⑥该用例在表单中所在行
        row = test_data_cases["case_id"] + 1
        # 第二步:发送请求到接口,获取实际结果
        response = HandleRequest().send(url=url,
                                        method=method,
                                        json=data,
                                        headers=headers)
        result = response.json()

        # 第三步:比对预期结果和实际结果
        try:
            self.assertEqual(expected["code"], result["code"])
            self.assertEqual(expected["msg"], result["msg"])
            if result["msg"] == "OK":
                #如果注册成功,去数据库查询当前注册的账号是否存在
                sql = "select * from futureloan.member where mobile_phone={}".format(
                    phone)
                #获取数据库中有没有该用户的信息:通过db对象,然后调用count方法
                count = self.db.count(sql)  #查找的结果
                #数据库中返回的数据做断言,判断是否有一条数据
                self.assertEqual(1, count)
            print("预期结果:{}".format(expected))
            print("实际结果:{}".format(result))
        except AssertionError as e:
            self.excel.write_data(row=row, column=8,
                                  value="未通过")  # 可以把列(column)放在配置文件里面
            # 记录没有通过的日志
            my_log.info("用例:{}------>执行未通过".format(test_data_cases["title"]))
            # 在没有通过的时候,使用print会打印在测试报告中
            print("预期结果:{}".format(expected))
            print("实际结果:{}".format(result))
            # 在没有通过的时候,将print输出到日志里面
            my_log.info("预期结果:{}".format(expected))
            my_log.info("实际结果:{}".format(result))
            raise e
        else:
            self.excel.write_data(row=row, column=8,
                                  value="通过")  # 可以把列(column)放在配置文件里面
            # 记录通过的日志
            my_log.info("用例:{}------>执行通过".format(test_data_cases["title"]))
Exemplo n.º 4
0
    def test_withdraw(self, test_data_cases):
        # 第一步:准备用例数据
        # 备注:列表、字典方式存储的,excel读取出来是字符串。数值类型,读取出来是数值类型的,字符串类型,读取出来是字符串类型。
        # ①拼接完整的接口地址
        url = conf.get_str("env", "url_ip") + test_data_cases["url"]
        # ②请求的方法
        method = test_data_cases["method"]

        # ③请求参数
        #调用replace_data方法进行参数替换
        test_data_cases["data"] = replace_data(test_data_cases["data"])
        data = eval(test_data_cases["data"])
        # ④请求头
        headers = eval(conf.get_str("env", "headers"))
        # 添加鉴权
        # 判断是否为登录接口,不是登录接口,则需要加token值
        if test_data_cases["interface"] != "login":
            # headers["Authorization"] = self.token_data
            headers["Authorization"] = getattr(TestData, "token_data")
        # ⑤预期结果
        expected = eval(test_data_cases["expected"])
        # ⑥该用例在表单中所在行
        row = test_data_cases["case_id"] + 1

        # 第二步:发送请求到接口,获取实际结果
        if test_data_cases[
                "check_sql"]:  # 先判断用例里面check_sql字段是否有数据,如果有数据,说明需要进行数据库校验
            sql = test_data_cases["check_sql"].format(
                conf.get_str("test_data", "user"))
            # 获取充值之前的余额
            start_money = self.db.get_one(sql)[0]
        response = HandleRequest().send(url=url,
                                        method=method,
                                        json=data,
                                        headers=headers)
        result = response.json()
        # 判断是否是登录的用例,如果是登录接口,则去获取用户的id,并设置为类属性
        if test_data_cases["interface"] == "login":
            # 登录之后,从响应结果中提取用户id和token
            # (1)获取用户id
            # TestWithdraw.member_id = jsonpath.jsonpath(result, "$..id")[0]  # 通过类名.属性名设置类属性
            member_id = jsonpath.jsonpath(result, "$..id")[0]
            setattr(TestData, "member_id", str(
                member_id))  #使用setattr设置TestData类,member_id属性,属性值为member_id
            # (2)提取token
            token_type = jsonpath.jsonpath(result, "$..token_type")[0]
            token = jsonpath.jsonpath(result, "$..token")[0]
            # TestWithdraw.token_data = token_type + " " + token# 通过类名.属性名设置类属性
            token_data = token_type + " " + token  # 通过类名.属性名设置类属性
            setattr(
                TestData, "token_data",
                token_data)  # 使用setattr设置TestData类,token_data属性,属性值为token_data

            # 设置类属性还可以通过setattr进行设置
            # 下面这行代码和上面那行代码是一个意思,都是将token设为类属性
            setattr(TestWithdraw, "token_data", token_type + " " + token)
            # 第一个参数:类名
            # 第二个参数:属性名
            # 第三个参数:对应的属性值
        # 第三步:比对预期结果和实际结果
        try:
            self.assertEqual(expected["code"], result["code"])
            self.assertEqual(expected["msg"], result["msg"])
            # 提现后,进行数据库校验
            if test_data_cases["check_sql"]:
                sql = test_data_cases["check_sql"].format(
                    conf.get_str("test_data", "user"))
                # 获取提现之后的余额
                end_money = self.db.get_one(sql)[0]
                # 获取请求参数里面的充值金额
                recharge_money = decimal.Decimal(str(data["amount"]))
                my_log.info("提现之前金额为:{}\n,提现金额为:{}\n,提现之后金额为:{}\n".format(
                    start_money, recharge_money, end_money))
                # 进行断言
                self.assertEqual(recharge_money, start_money - end_money)
        except AssertionError as e:
            self.excel.write_data(row=row, column=8,
                                  value="未通过")  # 可以把列(column)放在配置文件里面
            # 记录没有通过的日志
            my_log.info("用例:{}------>执行未通过".format(test_data_cases["title"]))
            # 在没有通过的时候,使用print会打印在测试报告中
            print("预期结果:{}".format(expected))
            print("实际结果:{}".format(result))
            # 在没有通过的时候,将print输出到日志里面
            my_log.info("预期结果:{}".format(expected))
            my_log.info("实际结果:{}".format(result))
            raise e
        else:
            self.excel.write_data(row=row, column=8,
                                  value="通过")  # 可以把列(column)放在配置文件里面
            # 记录通过的日志
            my_log.info("用例:{}------>执行通过".format(test_data_cases["title"]))