class TestLogin(BaseTest): """ author: ArtLinty email: [email protected] desc: 测试测试禅道登录业务 """ __test = dict( collection=read_csv(current=__file__, file_path="test_login.csv"), url=read_yaml(current=__file__, file_path="../../config/env_active.yml", key="zentao.url"), title="在登录页面,使用合法数据登录,操作成功", case="https://dwz.cn/GUIf2ZeN", feature="登录", story="系统登录操作", tag=("web", "zentao", "login", "valid"), severity=allure.severity_level.CRITICAL ) @pytest.fixture(autouse=True) def prepare(self): """ 测试固件 :return: """ self.init_logger(__name__) self.init_driver(url=self.__test.get("url")) yield self.close_driver() @allure.feature(__test.get("feature")) @allure.story(__test.get("story")) @allure.tag(*__test.get("tag")) @allure.severity(__test.get("severity")) @allure.testcase(url=__test.get("case")) @allure.title(__test.get("title")) @pytest.mark.parametrize("data", __test.get("collection")) def test_login(self, data): """ 测试登录,合法数据正常登录 :param data: :return: """ account = data.get("account") password = data.get("password") language = data.get("language") actual_lang_button_text = biz_set_language( driver=self.driver, language=language, logger=self.logger ) self.snapshot("在登录页面设置语言后截图=%r" % data) self.info("[%s] - 在登录页面设置语言,使用数据: %r" % (__name__, dict(language=language))) assert self.assert_equal(expected=data.get("exp_button_lang"), actual=actual_lang_button_text) current_url, actual_real_name = biz_get_real_name_after_login( driver=self.driver, account=account, password=password, logger=self.logger ) self.info( "[%r]-登录禅道, 使用数据 account=%r, password=%r" % (__file__, account, password) ) self.snapshot("登录后截图数据=%r" % data) expected = data.get("expected_url") assert self.assert_in( expected=expected, actual=current_url ), "登录后URL地址不对, expected=%r, actual=%r, 当前数据=%r" % (expected, current_url, data) expected = data.get("expected_real_name") assert self.assert_in( expected=expected, actual=actual_real_name ), "登录后 realname 地址不对, expected=%r, actual=%r, 当前数据=%r" % (expected, actual_real_name, data)
class TestWeatherNow(BaseTest): """ 标题: 在天气指数接口,使用合法有效的数据请求 查询天气指数接口,查询成功 作者: 梁静 时间: 20190826 邮件: [email protected] """ __test = dict( collection=read_csv(current=__file__, file_path="test_weather_now.csv"), config=read_yaml(current=__file__, file_path="../../config/env_active.yml", key="seniverse"), title="在天气指数接口,使用合法有效的数据请求 查询天气指数接口,查询成功", case="", feature="天气接口", story="天气接口的查询", tag=("api", "seniverse", "view", "valid"), severity=allure.severity_level.NORMAL ) @pytest.fixture(autouse=True) def prepare(self): """ 测试执行使用的测试固件,包含前置条件和清理操作 :return: """ # 首先是前置条件,在yeild之前 # 准备日志条件,就可以记录整个测试 self.init_logger(__name__) # 准备请求对象,就可以传递请求给业务,也可以对请求进行抓包截图 self.init_request( schema=parse_dict(dict_data=self.__test, data_key="config.schema"), host=parse_dict(dict_data=self.__test, data_key="config.host") ) # 是 yeild 的关键字,代表执行test_ 开头的方法的具体内容 self.info("[%s]- 完成测试的前置条件 set_up! " % __name__) yield # 接下来是 清理操作 self.close_request() self.wait() self.info("[%s]- 完成测试的清理操作 tear_up!" % __name__) @allure.feature(__test.get("feature")) @allure.story(__test.get("story")) @allure.tag(*__test.get("tag")) @allure.severity(__test.get("severity")) @allure.testcase(url=__test.get("case")) @allure.title(__test.get("title")) @pytest.mark.parametrize("data", __test.get("collection")) def test_weather_now(self, data): """ 执行测试的具体步骤 :param data: 通过读取__test_data_collection 得到一套 test_data :return: none """ self.info("[%s]-开始执行测试 ,使用数据:%r !" % (__name__, data)) # 准备数据 从test_data 取数据 data_input_dict = dict( api_key=data.get("私钥"), location=data.get("location"), language=data.get("language"), unit=data.get("unit"), request=self.request, logger=self.logger ) # 调用业务,使用上面的数据 self.info("[%s]-调用业务,使用数据data_input_dict:%r !" % (__name__, data_input_dict)) resp = biz_view_weather_now(data_input_dict) # 对比结果,使用test_data取得的期望,和上一步取得的结果进行对比 self.info("[%s]-开始进行断言,使用rasp:%r !" % (__name__, resp)) assert self.assert_equal(expected=data.get("期望状态码"), actual=resp.get("status_code")) assert self.assert_equal(expected=data.get("期望城市名称"), actual=resp.get("location.name")) assert self.assert_equal(expected=data.get("期望国家代号"), actual=resp.get("location.country")) assert self.assert_equal(expected=data.get("期望城市代码"), actual=resp.get("location.id")) self.info("[%s]-结束执行测试,使用数据:%r !" % (__name__, data))
class TestWithdrawAdd(BaseTest): """ 标题: 在支付对象接口,使用合法有效的数据请求 创建支付的接口,创建成功 作者: 刘挺立 时间: 20190813 邮件: [email protected] """ __test = dict(collection=read_csv(current=__file__, file_path="test_withdraw_add.csv"), config=read_yaml(current=__file__, file_path="../../config/env_active.yml", key="vvtech"), title="在支付对象接口,使用合法有效的数据请求,创建支付的接口,创建成功", case="https://dwz.cn/GUIf2ZeN", feature="取款接口", story="取款对象的创建", tag=("api", "vvtech", "add", "valid"), severity=allure.severity_level.CRITICAL) @pytest.fixture(autouse=True) def prepare(self): """ 测试执行使用的测试固件,包含前置条件和清理操作 :return: None """ # 首先是前置条件,在 yield 之前 # 准备日志文件,就可以记录整个测试 self.init_logger(__name__) # 准备请求对象,就可以传递请求给业务,也可以对请求进行抓包截图 self.init_request(schema=parse_dict(dict_data=self.__test, data_key="config.schema"), host=parse_dict(dict_data=self.__test, data_key="config.host")) # 是 yield 关键字,代表执行 test_ 开头的方法的具体内容 self.info("[%s] - 完成测试的前置条件 set_up! " % __name__) yield # 最后是清理操作,在 yield 之后 self.wait() self.info("[%s] - 完成测试的清理操作 tear_down! " % __name__) @allure.feature(__test.get("feature")) @allure.story(__test.get("story")) @allure.tag(*__test.get("tag")) @allure.severity(__test.get("severity")) @allure.testcase(url=__test.get("case")) @allure.title(__test.get("title")) @pytest.mark.parametrize("data", __test.get("collection")) def test_charges_create(self, data): """ 执行测试的具体步骤 :param data: 通过读取 __test_data_collection 得到一条 test_data :return: None """ self.info("[%s] - 开始执行测试,使用数据:%r! " % (__name__, data)) # 准备数据 从 test_data 取数据 data_input_dict = dict(vv_vv_signature=data.get("签名"), vv_time=data.get("时间戳"), app_secret=data.get("密钥"), client_id=data.get("客户编号"), password=data.get("密码"), is_android=data.get("平台"), mobile=data.get("手机号"), version=data.get("版本"), amount=data.get("金额"), bank_card_id=data.get("卡号"), request=self.request, logger=self.logger) # 调用业务,使用上面准备的数据 self.info("[%s] - 开始调用业务,使用数据 data_input_dict:%r! " % (__name__, data_input_dict)) resp, resp2 = biz_add_withdraw(data_input_dict) # 对比结果,使用 test_data 取到的期望,和上一步执行得到的结果进行对比 self.info("[%s] - 开始进行断言,使用数据 resp:%r! " % (__name__, resp)) assert self.assert_equal(expected=data.get("期望状态码"), actual=resp.get("status_code")) assert self.assert_equal(expected=data.get("期望状态码"), actual=resp2.get("status_code")) assert self.assert_int_equal(expected=data.get("期望flag"), actual=resp2.get("flag")) self.info("[%s] - 结束执行测试,使用数据:%r! " % (__name__, data))
class TestChargesCreate(BaseTest): """ 标题: 在支付对象接口,使用合法有效的数据请求 创建支付的接口,创建成功 作者: 刘挺立 时间: 20190813 邮件: [email protected] """ __test = dict( collection=read_csv(current=__file__, file_path="test_charges_create.csv"), config=read_yaml(current=__file__, file_path="../../config/env_active.yml", key="pingxx"), title="在支付对象接口,使用合法有效的数据请求,创建支付的接口,创建成功", case="https://dwz.cn/GUIf2ZeN", feature="支付接口", story="支付对象的创建", tag=("api", "pingxx", "create", "valid"), severity=allure.severity_level.CRITICAL ) @pytest.fixture(autouse=True) def prepare(self): """ 测试执行使用的测试固件,包含前置条件和清理操作 :return: None """ # 首先是前置条件,在 yield 之前 # 准备日志文件,就可以记录整个测试 self.init_logger(__name__) # 准备请求对象,就可以传递请求给业务,也可以对请求进行抓包截图 self.init_request( schema=parse_dict(dict_data=self.__test, data_key="config.schema"), host=parse_dict(dict_data=self.__test, data_key="config.host") ) # 是 yield 关键字,代表执行 test_ 开头的方法的具体内容 self.info("[%s] - 完成测试的前置条件 set_up! " % __name__) yield # 最后是清理操作,在 yield 之后 self.wait() self.info("[%s] - 完成测试的清理操作 tear_down! " % __name__) @allure.feature(__test.get("feature")) @allure.story(__test.get("story")) @allure.tag(*__test.get("tag")) @allure.severity(__test.get("severity")) @allure.testcase(url=__test.get("case")) @allure.title(__test.get("title")) @pytest.mark.parametrize("data", __test.get("collection")) def test_charges_create(self, data): """ 执行测试的具体步骤 :param data: 通过读取 __test_data_collection 得到一条 test_data :return: None """ self.info("[%s] - 开始执行测试,使用数据:%r! " % (__name__, data)) # 准备数据 从 test_data 取数据 rsa_raw = data.get("RSA私钥") if rsa_raw is not None and rsa_raw != "": rsa_private = read_txt(current=__file__, file_path=rsa_raw) else: rsa_private = None extra_raw = data.get("extra") if extra_raw is not None and extra_raw != "": extra_value = read_yaml(current=__file__, file_path=extra_raw, key="%s/data/extra" % data.get("数据编号")) else: extra_value = None data_input_dict = dict( order_no=data.get("订单编号"), amount=data.get("金额"), channel=data.get("渠道"), currency=data.get("货币"), subject=data.get("主题"), body=data.get("正文"), description=data.get("描述"), extra=extra_value, app=dict(id=data.get("app")), client_ip=data.get("client_ip"), secret_key=data.get("密钥"), rsa_private=rsa_private, request=self.request, logger=self.logger ) # 调用业务,使用上面准备的数据 self.info("[%s] - 开始调用业务,使用数据 data_input_dict:%r! " % (__name__, data_input_dict)) resp = biz_create_charge(data_input_dict) # 对比结果,使用 test_data 取到的期望,和上一步执行得到的结果进行对比 self.info("[%s] - 开始进行断言,使用数据 resp:%r! " % (__name__, resp)) assert self.assert_equal(expected=data.get("期望状态码"), actual=resp.get("status_code")) assert self.assert_equal(expected=data.get("期望object"), actual=resp.get("object")) assert self.assert_equal(expected=bool(data.get("期望paid")), actual=resp.get("paid")) assert self.assert_equal(expected=data.get("渠道"), actual=resp.get("channel")) assert self.assert_equal(expected=data.get("金额"), actual=resp.get("amount")) self.info("[%s] - 结束执行测试,使用数据:%r! " % (__name__, data))
class TestLifeSuggest(BaseTest): """ 标题: 在生活指数接口,使用合法有效的数据请求 查询生活指数的接口,查询成功 作者: 刘挺立 时间: 20190814 邮件: [email protected] """ __test = dict(collection=read_csv(current=__file__, file_path="test_life_suggest.csv"), config=read_yaml(current=__file__, file_path="../../config/env_active.yml", key="seniverse"), title="在生活指数接口,使用合法有效的数据请求 查询生活指数的接口,查询成功", case="https://dwz.cn/GUIf2ZeN", feature="生活接口", story="生活指数的查询", tag=("api", "seniverse", "view", "valid"), severity=allure.severity_level.CRITICAL) @pytest.fixture(autouse=True) def prepare(self): """ 测试执行使用的测试固件,包含前置条件和清理操作 :return: None """ # 首先是前置条件,在 yield 之前 # 准备日志文件,就可以记录整个测试 self.init_logger(__name__) # 准备请求对象,就可以传递请求给业务,也可以对请求进行抓包截图 self.init_request(schema=parse_dict(dict_data=self.__test, data_key="config.schema"), host=parse_dict(dict_data=self.__test, data_key="config.host")) # 是 yield 关键字,代表执行 test_ 开头的方法的具体内容 self.info("[%s] - 完成测试的前置条件 set_up! " % __name__) yield # 最后是清理操作,在 yield 之后 self.wait() self.info("[%s] - 完成测试的清理操作 tear_down! " % __name__) @allure.feature(__test.get("feature")) @allure.story(__test.get("story")) @allure.tag(*__test.get("tag")) @allure.severity(__test.get("severity")) @allure.testcase(url=__test.get("case")) @allure.title(__test.get("title")) @pytest.mark.parametrize("data", __test.get("collection")) def test_life_suggest(self, data): """ 执行测试的具体步骤 :param data: 通过读取 __test_data_collection 得到一条 test_data :return: None """ self.info("[%s] - 开始执行测试,使用数据:%r! " % (__name__, data)) # 准备数据 从 test_data 取数据 data_input_dict = dict(api_key=data.get("私钥"), location=data.get("location"), language=data.get("language"), request=self.request, logger=self.logger) # 调用业务,使用上面准备的数据 self.info("[%s] - 开始调用业务,使用数据 data_input_dict:%r! " % (__name__, data_input_dict)) resp = biz_view_life_suggestion(data_input_dict) # 对比结果,使用 test_data 取到的期望,和上一步执行得到的结果进行对比 self.info("[%s] - 开始进行断言,使用数据 resp:%r! " % (__name__, resp)) assert self.assert_equal(expected=data.get("期望状态码"), actual=resp.get("status_code")) assert self.assert_equal(expected=data.get("期望城市名称"), actual=resp.get("location.name")) assert self.assert_equal(expected=data.get("期望国家代号"), actual=resp.get("location.country")) self.info("[%s] - 结束执行测试,使用数据:%r! " % (__name__, data))