Exemple #1
0
class LoginTestCase(unittest.TestCase):
    excel = HandleExcel(filename, "login")
    cases = excel.read_data()

    @data(*cases)
    def test_login(self, case):
        method = case["method"]
        url = conf.get("env", "url") + case["url"]
        data = eval(case["data"])
        expected = eval(case["expected"])
        row = case["case_id"] + 1
        res = (request(method, url, json=data)).json()
        try:
            assert_dict(expected, res)
        except AssertionError as e:
            # 结果回写excel中
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")
Exemple #2
0
class TestUpdate(unittest.TestCase):
    excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlsx"), "user_info")
    cases = excel.read_data()

    @data(*cases)
    def test_add(self, case):
        # 准备用例数据
        phone = conf.get("test_data", "phone")
        pwd = conf.get("test_data", "pwd")
        member_id, token = HandleSetup.handle_setup(phone, pwd)
        data, res = HandleSetup.handle_case(case, member_id, token)
        row = case["case_id"] + 1
        expected = eval(case["expected"])
        try:
            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["msg"])
        except AssertionError as e:
            # 结果回写excel中
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")
Exemple #3
0
class TestList(unittest.TestCase):
    excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlsx"), "list")
    cases = excel.read_data()

    @data(*cases)
    def test_add(self, case):
        # 准备用例数据
        url = case["url"]
        method = case["method"]
        headers = {"X-Lemonban-Media-Type": "lemonban.v1"}
        response = request(url=url, method=method, json=data, headers=headers)
        res = response.json()
        row = case["case_id"] + 1
        expected = eval(case["expected"])
        try:
            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["msg"])
        except AssertionError as e:
            # 结果回写excel中
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")
Exemple #4
0
class TestInfo(unittest.TestCase):
    excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlsx"), "user_info")
    cases = excel.read_data()

    @data(*cases)
    def test_add(self, case):
        # 准备用例数据
        phone = conf.get("test_data", "phone")
        pwd = conf.get("test_data", "pwd")
        member_id, token = HandleSetup.handle_setup(phone, pwd)
        case["url"] = case["url"].replace("#member_id#", member_id)
        url = conf.get("env", "url") + case["url"]
        method = case["method"]
        headers = {"X-Lemonban-Media-Type": "lemonban.v1"}
        response = request(url=url, method=method, json=data, headers=headers)
        res = response.json()
        row = case["case_id"] + 1
        expected = eval(case["expected"])
        try:
            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["msg"])
        except AssertionError as e:
            # 结果回写excel中
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")
Exemple #5
0
class TestAudit(unittest.TestCase):
    excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlxs"), "audit")
    cases = excel.read_data()

    @data(*cases)
    def test_audit(self, case):
        # 第一步:准备数据:获取管理员token
        admin_phone = conf.get("test_data", "phone")
        admin_pwd = conf.get("test_data", "pwd")
        admin_member_id, admin_token = HandleSetup.handle_setup(admin_phone, admin_pwd)
        # 2:获取普通用户id和token
        phone = conf.get("test_data", "phone")
        pwd = conf.get("test_data", "pwd")
        member_id, token = HandleSetup.handle_setup(phone, pwd)
        #每次添加一个新项目
        url = conf.get("env", "url") + "/loan/add"
        headers = eval(conf.get("env", "headers"))
        headers["Authorization"] = token
        data = {"member_id": member_id,
                "title": "木森借钱造大炮",
                "amount": 2000,
                "loan_rate": 12.0,
                "loan_term": 3,
                "loan_date_type": 1,
                "bidding_days": 5}
        # 发送请求,添加项目
        response = request(method="post", url=url, json=data, headers=headers)
        res = response.json()
        # 提取项目的id给审核的用例使用
        loan_id = jsonpath.jsonpath(res, "$..id")[0]
        url = conf.get("env", "url") + case["url"]
        data = eval(case["data"].replace("#loan_id#", str(loan_id)))
        headers = eval(conf.get("env", "headers"))
        headers["Authorization"] = admin_token
        method = case["method"]
        expected = eval(case["expected"])
        row = case["case_id"] + 1
        # 第二步:调用接口,获取实际结果
        response = request(url=url, method=method, json=data, headers=headers)
        res = response.json()
        # 第三步:断言
        try:
            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["msg"])
        except AssertionError as e:
            # 结果回写excel中
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")
Exemple #6
0
class TestInvset(unittest.TestCase):
    execl = HandleExcel(filename, "invest")
    cases = execl.read_data()

    @data(*cases)
    def test_invest(self, case):
        """投资用例"""
        # 第一步:准备数据
        url = conf.get("env", "url") + case["url"]
        method = case["method"]
        headers = eval(conf.get("env", "headers"))
        if case["interface"] != "login":
            # 如果不是登陆接口,添加一个token
            headers["Authorization"] = getattr(HandleSetup, "token")
        data = eval(replace_data(case["data"]))
        expected = eval(case["expected"])
        row = case["case_id"] + 1
        response = request(url, method, json=data, headers=headers)
        res = response.json()
        if case["interface"] == "login":
            # 如果是登陆接口,提取id和token
            member_id = str(jsonpath.jsonpath(res, "$..id")[0])
            token = "Bearer" + " " + jsonpath.jsonpath(res, "$..token")[0]
            setattr(HandleSetup, "member_id", member_id)
            setattr(HandleSetup, "token", token)
        if case["interface"] == "add":
            # 如果是加标接口,提取id进行保存
            loan_id = str(jsonpath.jsonpath(res, "$..id")[0])
            setattr(HandleSetup, "loan_id", loan_id)
        # 断言
        try:
            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["meg"])
        except AssertionError as e:
            # 结果回写excel中
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")
Exemple #7
0
class TestWithdraw(unittest.TestCase):
    excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlsx"), "withdraw")
    cases = excel.read_data()

    @data(*cases)
    def test_withdraw(self, case):
        # 第一步准备用例参数
        phone = conf.get("test_data", "phone")
        pwd = conf.get("test_data", "pwd")
        member_id, token = HandleSetup.handle_setup(phone, pwd)
        # 判断该用例是否需要数据库校验,获取提现之前的余额
        start_money = TestWithdraw.handle_sql(self, case, member_id)
        data, res = HandleSetup.handle_case(case, member_id, token)
        row = case["case_id"] + 1
        expected = eval(case["expected"])
        # 第三步:断言预期结果和实际结果
        try:
            if start_money != 0:
                self.assertEqual(expected["code"], res["code"])
                self.assertEqual(expected["msg"], res["msg"])
                end_money = TestWithdraw.handle_sql(self, case, member_id)
                withdraw_money = decimal.Decimal(str(data["amount"]))
                self.assertEqual(withdraw_money, start_money - end_money)
        except AssertionError as e:
            # 结果回写excel中
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")

    def handle_sql(self, case, member_id):
        if case["check_sql"]:
            sql = case["check_sql"].format(member_id)
            money = db.find_one(sql)["leave_amount"]
            return money
        return 0
class InterfaceTestCase(unittest.TestCase):
    excel = HandleExcel(filename, "interface")
    cases = excel.read_data()

    @data(*cases)
    def test_interface(self, case):
        login()
        newproject()
        # 1.准备用例数据
        EnvData.name = random_intername()
        url = conf.get("env", "url") + case["url"]
        method = case["method"]
        data = eval(replace_data(case["data"]))
        expected = eval(replace_data(case["expected"]))
        headers = {"Authorization": getattr(EnvData, "token")}
        row = case["case_id"] + 1
        if case["check_sql"]:
            sql = replace_data(case["check_sql"])
            start_count = db.find_count(sql)
        res = (request(method=method, url=url, json=data, headers=headers)).json()
        # 第三步,断言预期结果和实际结果
        try:
            assert_dict(expected, res)

            if case["check_sql"]:
                sql = replace_data(case["check_sql"])
                end_count = db.find_count(sql)
                self.assertEqual(1, end_count - start_count)

        except AssertionError as e:
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")
Exemple #9
0
class TestAdd(unittest.TestCase):
    excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlsx"), "add")
    cases = excel.read_data()

    @data(*cases)
    def test_add(self, case):
        # 准备用例数据
        phone = conf.get("test_data", "phone")
        pwd = conf.get("test_data", "pwd")
        member_id, token = HandleSetup.handle_setup(phone, pwd)
        start_count = TestAdd.handle_sql(self, case, member_id)
        data, res = HandleSetup.handle_case(case, member_id, token)
        row = case["case_id"] + 1
        expected = eval(case["expected"])
        # 断言,比对预期结果和实际结果
        try:
            if start_count != 0:
                self.assertEqual(expected["code"], res["code"])
                self.assertEqual(expected["msg"], res["msg"])
                end_count = TestAdd.handle_sql(self, case, member_id)
                self.assertEqual(1, end_count - start_count)
        except AssertionError as e:
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")

    def handle_sql(self, case, member_id):
        if case["check_sql"]:
            sql = case["check_sql"].replace("#member_id#", member_id)
            count = db.find_count(sql)
            return count
        return 0
Exemple #10
0
class LoginTestCase(unittest.TestCase):
    excel = HandleExcel(filename, "login")
    cases = excel.read_data()

    @data(*cases)
    def test_login(self, case):
        # 第一步:准备用例数据
        # 请求方法
        method = case["method"]
        # 请求地址
        url = case["url"]
        # 请求参数
        data = eval(case["data"])
        # 请求头
        headers = eval(conf.get("env", "headers"))
        # 预期结果
        expected = eval(case["expected"])
        # 用例所在行
        row = case["case_id"] + 1
        # 第二步:发送请求获取实际结果
        response = request(method=method, url=url, json=data, headers=headers)
        # 获取实际结果
        res = response.json()
        # 第三步:断言
        try:
            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["msg"])
        except AssertionError as e:
            # 结果回写excel中
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")
登陆  同一用户名和密码
充值  上一个登陆接口返回值里的 token,member_id
提现  登陆接口返回值里的 token,member_id
加标  
"""
import unittest
from Common.handle_phone import get_new_phone
from Common.handle_data import EnvData, replace_case_by_regular, clear_EnvData_attrs
from Common.myddt import ddt, data

from Common.handle_excel import HandleExcel
from Common.handle_path import datas_dir
from Common.handle_requests import send_requests
from Common.handle_extract_data_from_response import extract_data_from_response

he = HandleExcel(datas_dir + "\\api_cases.xlsx", "业务流")
cases = he.read_all_datas()
he.close_file()


@ddt
class TestUserBusiness(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        # 清理环境变量EnvData
        clear_EnvData_attrs()

        # 生成一个新的手机号码。设置为全局变量。
        new_phone = get_new_phone()
        setattr(EnvData, "phone", new_phone)
class RegisterTestCase(unittest.TestCase):
    excel = HandleExcel(filename, "register")
    cases = excel.read_data()

    @data(*cases)
    def test_register(self, case):
        # 准备用例数据
        method = case["method"]
        url = conf.get("env", "url") + case["url"]
        if case["interface"] == "register":
            # 注册接口,则随机生成一个用户名和email
            EnvData.name = self.random_username()
            EnvData.email = self.random_email()
        data = eval(replace_data(case["data"]))
        expected = eval(replace_data(case["expected"]))
        row = case["case_id"] + 1
        # 第二步:发送请求获取实际结果
        res = (requests.request(method=method, url=url, json=data)).json()
        # 第三步:断言
        try:
            assert_dict(expected, res)
            # 判断是否需要进行sql校验
            if case["check_sql"]:
                sql = replace_data(case["check_sql"])
                res = db.find_count(sql)
                self.assertEqual(1, res)
        except AssertionError as e:
            # 结果回写excel中
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")

    @staticmethod
    def random_username():
        """生成一个数据库里面未注册的用户名"""
        while True:
            name = "fls"
            for i in range(5):
                r = R(0, 9)
                name += str(r)

            # 数据库查询该用户名是否存在
            sql = 'SELECT * FROM test.auth_user WHERE username="******"'.format(
                name)
            res = db.find_count(sql)
            # 如果不存在,则返回该用户名
            if res == 0:
                return name

    @staticmethod
    def random_email():
        """生成一个数据库里面未注册的邮箱地址"""
        while True:
            num = ""
            address = ""
            email = "@qq.com"
            for i in range(9):
                r = R(0, 9)
                num += str(r)
                address = num + email
            # 数据库查询该用户名是否存在
            sql = 'SELECT * from test.auth_user WHERE email ="{}"'.format(
                address)
            res = db.find_count(sql)
            # 如果不存在,则返回该用户名
            if res == 0:
                return address
Exemple #13
0
class RegisterTestCase(unittest.TestCase):
    excel = HandleExcel(filename, "register")
    cases = excel.read_data()

    @data(*cases)
    def test_register(self, case):
        # 第一步:准备用例数据
        # 请求方法
        method = case["method"]
        # 请求地址
        url = conf.get("env", "url") + "/member/register"
        # 判断是否有手机号需要替换
        if "#phone#" in case["data"]:
            # 随机生成一个手机号码
            phone = self.random_phone()
            # 将参数中的#phone#,替换成随机生成的手机号
            case["data"] = case["data"].replace("#phone#", phone)
        # 请求参数
        data = eval(case["data"])
        # 请求头
        headers = eval(conf.get("env", "headers"))
        # 预期结果
        expected = eval(case["expected"])
        # 用例所在行
        row = case["case_id"] + 1
        # 第二步:发送请求获取实际结果
        response = request(method=method, url=url, json=data, headers=headers)
        # 获取实际结果
        res = response.json()
        print("预期结果:", expected)
        print("实际结果:", res)
        # 第三步:断言
        try:
            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["msg"])
        except AssertionError as e:
            # 结果回写excel中
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_data(row=row, column=8, value="通过")

    @classmethod
    def random_phone(cls):
        """生成一个数据库里面未注册的手机号码"""
        while True:
            phone = "155"
            for i in range(8):
                r = random.randint(0, 9)
                phone += str(r)
            # 数据库查询该手机号是否存在
            sql = "SELECT * FROM futereloan.member WHERE mobile_phone={}".format(
                phone)
            res = db.find_count(sql)
            # 如果不存在,返回该手机号
            if res == 0:
                return phone
Exemple #14
0
 def obtain_datas(self):
     case_path = os.path.join(test_datas_dir, self.table_name)
     case_datas = HandleExcel(case_path, self.sheet_names)
     case_all_datas = case_datas.read_test_cases_datas()
     case_datas.close_file()
     return case_all_datas