Exemple #1
0
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
Exemple #3
0
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()