class TestLogin(object): """登录测试""" def setup_class(self): self.driver = get_driver( 'com.yunmall.lc', 'com.yunmall.ymctoc.ui.activity.MainActivity') self.unit_page = UnitePage(self.driver) def teardown_class(self): self.driver.quit() @pytest.mark.parametrize('test_num,username,password,exp', get_login_data()) def test_login(self, test_num, username, password, exp): allure.attach('登录测试', '%s 预期:%s' % (test_num, exp)) # 点击我 self.unit_page.home_page().click_me_btn() # 选择已有账号去登录 self.unit_page.choice_login().click_exists_account_login() # 登录 self.unit_page.login_page().login(username, password) # 断言 assert exp in self.unit_page.person_page().get_text_my_shopping_cart() # 点击设置 self.unit_page.person_page().click_setting_btn() # 退出登录 self.unit_page.setting_page().logout()
class TestLogin(object): def setup_class(self): # 初始化driver self.driver = get_driver( 'com.yunmall.lc', 'com.yunmall.ymctoc.ui.activity.MainActivity') # 实例化统一入口类 self.unite_page = UnitePage(self.driver) def teardown_class(self): # 退出driver self.driver.quit() @pytest.fixture(autouse=True) def go_to_login(self): """跳转到登录页面,每次用例执行都要依赖一次""" # 点击我 self.unite_page.home_page().click_me_btn() # 点击已有账号去登录 self.unite_page.choice_login().click_exists_account_login() def person_logout(self): """个人中心执行退出操作""" # 1、点击设置 self.unite_page.person_page().click_setting_btn() # 2、退出 self.unite_page.setting_page().logout() @pytest.mark.parametrize('case_num, username, pwd, exp_data', login_data().get('suc')) @allure.step('登录正向测试-预期成功') def test_suc_login(self, case_num, username, pwd, exp_data): """ 预期成功 :param case_num: 用例编号 :param username: 用户名 :param pwd: 密码 :param exp_data: 预期结果 :return: """ # 登录 self.unite_page.login_page().login(username, pwd) try: # 获取我的收藏 shopping_cart_text_info = self.unite_page.person_page( ).get_text_my_shopping_cart() try: # 断言我的收藏是否在个人中心页面 assert exp_data == shopping_cart_text_info except AssertionError: # 断言失败,“我的收藏”不在个人中心 # 截图 self.unite_page.login_page().screen() # 断言失败,防止捕获断言异常,没有断言,那么测试方法默认断言通过 assert False finally: # 退出 self.person_logout() except TimeoutException: # 超时异常 定位不到“我的收藏”这个元素 # 截图 self.unite_page.login_page().screen() try: # 判断登录按钮是否在此页面 assert self.unite_page.login_page().if_login_btn() # 关闭登登录页面 self.unite_page.login_page().close_login_page() except AssertionError: # 退出操作 self.person_logout() # 断言失败,防止捕获断言异常,没有断言,那么测试方法默认断言通过 assert False @pytest.mark.parametrize('case_num, username, pwd,toast, exp_data', login_data().get('dis')) @allure.step('登录逆向测试-预期失败') def test_fail_login(self, case_num, username, pwd, toast, exp_data): """ 预期失败 :param case_num: 用例编号 :param username: 用户名 :param pwd: 密码 :param toast:消息拼接语句 :param exp_data: 预期结果 :return: """ # 登录 self.unite_page.login_page().login(username, pwd) try: # 定位到toast消息 toast_info_text = self.unite_page.login_page().get_toast(toast) try: # 断言预期结果是否在获取的toast文本信息中 assert exp_data == toast_info_text except AssertionError: # 截图 self.unite_page.login_page().screen() # 断言失败,防止捕获断言异常,没有断言,那么测试方法默认断言通过 assert False except TimeoutException: # 定位不到toast # 截图 self.unite_page.login_page().screen() # 断言失败,防止捕获断言异常,没有断言,那么测试方法默认断言通过 assert False finally: try: # 断言登录按钮 assert self.unite_page.login_page().if_login_btn() # 关闭登录页面 self.unite_page.login_page().close_login_page() except AssertionError: # 截图 self.unite_page.login_page().screen() # 退出个人中心 self.person_logout() # 断言失败,防止捕获断言异常,没有断言,那么测试方法默认断言通过 assert False
class TestLogin(object): def setup_class(self): # 初始化driver self.driver = get_driver( 'com.yunmall.lc', 'com.yunmall.ymctoc.ui.activity.MainActivity') # 实例化统一入口类 self.unite_page = UnitePage(self.driver) def teardown_class(self): # 退出driver self.driver.quit() @pytest.fixture(autouse=True) def go_to_login(self): """跳转到登录页面,每次用例执行都要依赖一次""" # 点击我 self.unite_page.home_page().click_me_btn() # 点击已有账号去登录 self.unite_page.choice_login().click_exists_account_login() def judge_login_btn_exists(self): """判断登录按钮""" if "登录" in self.unite_page.login_page().get_login_btn_text(): # 关闭登录页面 self.unite_page.login_page().close_login_page() else: # 登录按钮不在此页面 # 1、点击设置 self.unite_page.person_page().click_setting_btn() # 2、退出 self.unite_page.setting_page().logout() @pytest.mark.parametrize('case_num, username, pwd, exp_data', GetLoginData().get_login_suc_data()) @allure.step('登录正向测试-预期成功') def test_suc_login(self, case_num, username, pwd, exp_data): """ 预期成功 :param case_num: 用例编号 :param username: 用户名 :param pwd: 密码 :param exp_data: 预期结果 :return: """ # 登录 self.unite_page.login_page().login(username, pwd) shopping_cart_text_info = self.unite_page.person_page( ).get_text_my_shopping_cart() allure.attach('测试编号:%s' % case_num, '预期结果:%s,实际结果:%s' % (exp_data, shopping_cart_text_info)) # 判断我的收藏是否在个人中心页面 if exp_data in self.unite_page.person_page().get_text_my_shopping_cart( ): # 在==退出 # 1、点击设置 self.unite_page.person_page().click_setting_btn() # 2、退出 self.unite_page.setting_page().logout() else: # 不在==判断登录按钮是否在此页面 self.judge_login_btn_exists() @pytest.mark.parametrize('case_num, username, pwd,toast, exp_data', GetLoginData().get_login_dis_data()) @allure.step('登录逆向测试-预期失败') def test_fail_login(self, case_num, username, pwd, toast, exp_data): """ 预期失败 :param case_num: 用例编号 :param username: 用户名 :param pwd: 密码 :param toast:消息拼接语句 :param exp_data: 预期结果 :return: """ # 登录 self.unite_page.login_page().login(username, pwd) toast_info_text = self.unite_page.login_page().get_toast(toast) allure.attach('测试编号:%s' % case_num, '预期结果:%s 实际结果:%s' % (exp_data, toast_info_text)) # 判断预期结果是否在获取的toast文本信息中 if exp_data in self.unite_page.login_page().get_toast(toast): # 预期结果在获取的toast文本信息中==>判断登录按钮 self.judge_login_btn_exists() else: # 预期结果不在获取的toast文本信息中 self.judge_login_btn_exists()