class Test_Login: def setup_class(self): # 实例化统一入口类 self.page_obj = Page(get_driver()) self.page_obj.get_login_page().click_my_btn() def teardown_class(self): self.page_obj.driver.quit() @allure.step(title="测试用例") @pytest.mark.parametrize( "case_num, username, passwd, get_mess, expect_message, tag", get_data()) def test_login_page(self, case_num, username, passwd, get_mess, expect_message, tag): """ 登录操作 :param case_num: 用例编号 :param username: 用户名 :param passwd: 密码 :param get_mess: toast传参 :param expect_message: 预期toast消息 :param tag: 标记登陆成功用例 :return: """ allure.attach("用例编号", "{}".format(case_num)) # 点击登陆注册 self.page_obj.get_login_page().click_login_sign_btn() # 登陆操作 self.page_obj.get_login_page().login_input_page(username, passwd) if tag: try: # 获取登陆成功toast suc_msg = self.page_obj.get_login_page().get_toast(get_mess) # 获取我的订单状态 order_status = self.page_obj.get_login_page( ).if_my_order_status() # 点击设置按钮 self.page_obj.get_setting_page().setting_page() # 退出登录 self.page_obj.get_setting_page().logout_page() assert suc_msg == expect_message and order_status, self.page_obj.get_login_page( ).get_screen() except Exception as e: self.page_obj.get_login_page().get_screen() # 关闭登陆信息输入页面 self.page_obj.get_login_page().login_close_page() assert False else: try: # 获取登陆失败toast消息 fail_msg = self.page_obj.get_login_page().get_toast(get_mess) if fail_msg: assert fail_msg == expect_message, self.page_obj.get_login_page( ).get_screen() else: assert False finally: self.page_obj.get_login_page().login_close_page()
class Test_Login: def setup_class(self): self.page_obj = Page(get_driver()) # 点击我的 self.page_obj.get_login_page().click_my_btn() def teardown_class(self): self.page_obj.driver.quit() @pytest.mark.parametrize("username,passwd,expectx,expect_toast,get_msg", get_login_data()) def test_login(self, username, passwd, expectx, expect_toast, get_msg): # 点击登陆/注册 self.page_obj.get_login_page().click_insert_login() # 登陆操作 self.page_obj.get_login_page().login(username, passwd) if expectx: try: # 登陆成功toast消息 suc_msg = self.page_obj.get_login_page().find_toast(get_msg) # 获取我的订单按钮是否存在 成功返回True 不成功返回False suc_status = self.page_obj.get_login_page( ).get_suc_login_status() # 断言成功/失败 assert suc_msg == expect_toast and suc_status, self.page_obj.get_login_page( ).screen_shot() # 退出操作 # 点击个人中心设置 self.page_obj.get_setting_page().click_setting_btn() # 点击退出登录按钮 self.page_obj.get_setting_page().click_logout_btn() except: self.page_obj.get_login_page().screen_shot() # 点击登陆页面关闭按钮 self.page_obj.get_login_page().login_faile_x() assert False else: # 获取toast消息 reslut_msg = self.page_obj.get_login_page().find_toast(get_msg) # 点击登陆页面关闭按钮 self.page_obj.get_login_page().login_faile_x() assert expect_toast == reslut_msg, self.page_obj.get_login_page( ).screen_shot()
class Test_01: def setup_class(self): self.page_obj = Page( get_driver("com.yunmall.lc", "com.yunmall.ymctoc.ui.activity.MainActivity")) def teardown_class(self): self.page_obj.driver.quit() @pytest.fixture(autouse=True) def in_login(self): # 点击我的 self.page_obj.get_home_page_obj().click_my_btn() # 点击已有账号登录 self.page_obj.get_sign_page_obj().click_exits_account_btn() @pytest.mark.parametrize('test_num,phone,passwd,tag_message,expect_requst', get_login_data().get('scc')) def test_login_scc(self, test_num, phone, passwd, tag_message, expect_requst): """预期正确的用例""" try: coupons = self.page_obj.get_person_page_obj().get_coupons_text() try: assert coupons == expect_requst except AssertionError as e: print(e.__str__()) # 点击设置 self.page_obj.get_person_page_obj().click_setting_btn() # 点击退出 self.page_obj.get_setting_page().click_logout_btn() except TimeoutError as e: # 关闭登录页面 self.page_obj.get_login_page_obj().close_login_page_btn() @pytest.mark.parametrize('test_num,phone,passwd,tag_message,expect_requst', get_login_data().get('s')) def test_login_s(self, test_num, phone, passwd, tag_message, expect_requst): """预期失败的用例""" pass
class Test_01: def setup_class(self): self.Page_obj = Page(get_driver("com.tpshop.malls", ".SPMainActivity")) self.Page_obj.get_login_page().click_my_btn() def teardown_class(self): self.Page_obj.driver.quit() @allure.step("执行测试用例") @pytest.mark.parametrize( "case_num, username, passwd,get_mess,expect_message, tag", get_data()) def test_01_1(self, case_num, username, passwd, get_mess, expect_message, tag): self.Page_obj.get_login_page().click_sign_btn() self.Page_obj.get_login_page().input_mess(username, passwd) self.Page_obj.get_login_page().click_login_btn() if tag: try: order_status = self.Page_obj.get_login_page( ).if_my_order_status() toast = self.Page_obj.get_login_page().get_toast(get_mess) self.Page_obj.get_login_page().click_setting_btn() self.Page_obj.get_setting_page().clcik_exit_btn() assert order_status and toast == expect_message except Exception as e: print(e) self.Page_obj.get_login_page().click_close() assert False else: try: toast = self.Page_obj.get_login_page().get_toast(get_mess) if toast: assert toast == expect_message else: assert False finally: self.Page_obj.get_login_page().click_close()
class Test_Login: def setup_class(self): # 实例化一个page的统一入口类对象 self.page_obj = Page( get_driver("com.yunmall.lc", "com.yunmall.ymctoc.ui.activity.MainActivity")) def teardown_class(self): self.page_obj.driver.quit() @pytest.mark.parametrize( 'test_num,phone,passwd,tag,tag_message,expect_requst', get_aolai_data()) def test_login(self, test_num, phone, passwd, tag, tag_message, expect_requst): # 点击我的按钮 self.page_obj.get_home_page_obj().click_my_btn() # 点击已有账号去登录 self.page_obj.get_sign_page_obj().click_exits_account_btn() # 进行登录操作 self.page_obj.get_login_page_obj().login(phone, passwd) # 断言是否登录成功,成功就退出,未成功则判断提示信息, if tag == 1: # 预期成功用例 try: # 定位我的优惠券 coupons = self.page_obj.get_person_page_obj().get_coupons_text( ) try: # 断言 定位的我的优惠券文本==预期结果 assert coupons == expect_requst # 元素依然是可以找到的,只是里面的文本可能变了,所以断言时文本不相等 ,但不影响,所以捕获这个异常 except AssertionError as e: print(e.__str__()) # 执行退出操作 # 点击设置按钮 self.page_obj.get_person_page_obj().click_setting_btn() # 向上滑屏,点击退出登录 self.page_obj.get_setting_page().click_logout_btn() # 如果找不到我的优惠券,那么说明本该本成功的用例失败了 except TimeoutException as e: # 关闭登录页面 self.page_obj.get_login_page_obj().close_login_page_btn() # 执行到这里,说明本次用例执行失败,必须抛一个异常,不然会显示本次用例是成功的 assert False else: # 预期失败案例 try: # 获取toast消息 toast_message = self.page_obj.get_person_page_obj( ).get_toast_text(tag_message) print(toast_message) # 获取登录按钮是否存在 if_login_btn = self.page_obj.get_login_page_obj( ).if_login_btn_exits() print(if_login_btn) # 断言取到了toast文本=预期 同时在登录页面 assert if_login_btn and toast_message == expect_requst print(expect_requst) # 如果找不到toast消息,就会超时,所以捕获超时异常 except TimeoutException as e: # 找不到说明和预期不一样,那就是这条用例运行失败,所以必须抛一个异常,不然会显示运行成功 assert False # 不管执行成功还是失败都要把这个页面关闭,才能不影响下一条用例的执行 finally: # 关闭登录页面 self.page_obj.get_login_page_obj().close_login_page_btn()
class TestLLogin(object): def setup_class(self): """初始化对象""" self.driver = get_phone_driver( 'com.yunmall.lc', 'com.yunmall.ymctoc.ui.activity.MainActivity') self.page_obj = Page(self.driver) def teardown_class(self): self.driver.quit() @pytest.fixture(autouse=True) def into_login_page(self): """点击首页'我',跳转至注册页面""" self.page_obj.get_index_page().go_to_sign_page() """点击"已账号",跳转至登录页面""" self.page_obj.get_sign_page().go_to_login_page() @pytest.mark.parametrize("login_num,name,password,exp", get_login_data().get("success")) def test_success_login(self, login_num, name, password, exp): """打印测试数据顺序""" print("这是用例测试:", login_num) """点击首页'我',跳转至注册页面""" self.page_obj.get_index_page().go_to_sign_page() """点击"已账号",跳转至登录页面""" self.page_obj.get_sign_page().go_to_login_page() """输入信息,点击登录,跳转至个人页面""" self.page_obj.get_login_page().login(name, password) """进行断言,点击设置,跳转至设置页面""" try: """断言成功""" res = self.page_obj.get_person_page().get_login_success_result() try: assert res in exp except AssertionError: """在个人中心,但没有'exp'""" """截图""" self.page_obj.get_person_page().screen_shot() assert False finally: """点击设置""" self.page_obj.get_person_page().go_to_setting_page() """执行退出操作`""" self.page_obj.get_setting_page().scroll_screen_in_setting(1) self.page_obj.get_setting_page().click_login_out_btn(1) except TimeoutException: """断言失败""" """还停留在登录页面""" self.page_obj.get_person_page().screen_shot() # 截图 """需要执行退出登录页面,以便于进行下面的测试""" self.page_obj.get_login_page().close_login_page() @pytest.mark.parametrize("login_num,name,password,toast,exp", get_login_data().get("fail")) def test_fail_login(self, login_num, name, password, toast, exp): print("这是测试用例", login_num) """输入信息,点击登录,跳转至个人页面""" self.page_obj.get_login_page().login(name, password) """进行断言""" try: """能获取toast信息""" message = self.page_obj.get_login_page().get_toast(toast) try: assert message == exp except AssertionError: """截图""" self.page_obj.get_login_page().screen_shot() assert False finally: try: """判断登录按钮在不在""" assert self.page_obj.get_login_page().if_login_btn() """在,就关闭登录页面""" self.page_obj.get_login_page().close_login_page() except AssertionError: """不在,就可能在个人页面""" """截图""" self.page_obj.get_login_page().screen_shot() """点击设置""" self.page_obj.get_person_page().go_to_setting_page() """执行退出操作`""" self.page_obj.get_setting_page().click_login_out_btn(1) assert False except TimeoutException: """不能获取到toast消息""" try: """对登录按钮进行判断""" self.page_obj.get_login_page().if_login_btn() # 登录按钮在,表示在登录页面 self.page_obj.get_login_page().close_login_page() # 关闭登录页面 except TimeoutException: self.page_obj.get_person_page().go_to_setting_page() # 点击设置 self.page_obj.get_setting_page().click_login_out_btn( ) # 执行退出操作 assert False
class TestLogin: def setup_class(self): # 实例化统一入口类 self.page_obj = Page( get_android_driver("com.yunmall.lc", "com.yunmall.ymctoc.ui.activity.MainActivity")) def teardown_class(self): # 退出driver self.page_obj.driver.quit() @pytest.fixture(autouse=True) def goto_login(self): """进入登录页面""" # 点击我 self.page_obj.get_home_page().click_my_btn() # 点击已有账号去登录 self.page_obj.get_chocie_login_page().click_exits_account_btn() @pytest.mark.parametrize("case_num, username, passwd, expect_data", get_login_data().get("suc")) def test_login_suc(self, case_num, username, passwd, expect_data): """ 预期成功测试用例 :param case_num: 用例编号 :param username: 用户名 :param passwd: 密码 :param expect_data: 预期结果 :return: """ # 登录 self.page_obj.get_login_page().login(username, passwd) try: # 获取收藏 cart_text = self.page_obj.get_person_page().get_shop_cart_text() try: # 断言 assert cart_text == expect_data except AssertionError: # 断言失败异常 """个人中心""" # 截图 self.page_obj.get_person_page().screen_shot() assert False finally: # 点击设置 self.page_obj.get_person_page().click_setting_btn() # 退出操作 self.page_obj.get_setting_page().logout() except TimeoutException: """停留在登录页面""" # 截图 self.page_obj.get_setting_page().screen_shot() # 关闭页面 self.page_obj.get_login_page().close_login_page() assert False @pytest.mark.parametrize("case_num, username, passwd,toast,expect_data", get_login_data().get("fail")) def test_login_fail(self, case_num, username, passwd, toast, expect_data): """ 预期失败测试用例 :param case_num: 用例编号 :param username: 用户名 :param passwd: 密码 :param toast: xpath拼接语句 :param expect_data: 预期结果 :return: """ # 登录操作 self.page_obj.get_login_page().login(username, passwd) try: """找到toast""" # 获取toast 消息 message = self.page_obj.get_login_page().get_toast(toast) try: # 断言 assert message == expect_data except AssertionError: # 截图 self.page_obj.get_login_page().screen_shot() assert False except TimeoutException: """没找到toast 消息""" # 截图 self.page_obj.get_login_page().screen_shot() assert False finally: try: """登录按钮存在""" # 判断登录按钮 self.page_obj.get_login_page().if_login_btn() # 关闭登录页面 self.page_obj.get_login_page().close_login_page() except TimeoutException: """登录按钮不存在""" # 点击设置 self.page_obj.get_person_page().click_setting_btn() # 退出操作 self.page_obj.get_setting_page().logout() # 找不到登录按钮 全失败 assert False