美文网首页
Selenium(8)-webUI自动化的测试用例编写

Selenium(8)-webUI自动化的测试用例编写

作者: 小小一颗卤蛋 | 来源:发表于2024-05-16 15:54 被阅读0次

    在编写测试用例之前,需要封装好浏览器和基础页面
    UI自动化测试的测试用例编写时,按照功能测试步骤,把操作步骤以及结果检验使用代码实现即可,遇到有前置条件的使用set_up()函数实现,后置条件使用tear_down()函数实现,
    不同于普通功能测试的地方在于,自动化测试的用例
    本文使用以下两个用例做示范
    示例1:
    用例名称:正确的账号登录系统
    测试步骤:
    1)打开浏览器并打开测试系统
    2)在账号、密码的输入框中输入账号和密码
    3)点击登录按钮
    预期结果:页面进入测试系统的首页(校验是否正确进入了首页)
    后置条件:退出测试系统

    示例2:
    用例名称:错误的账号登录系统
    测试步骤:
    1)打开浏览器并打开测试系统
    2)在账号、密码的输入框中输入账号和密码
    3)点击登录按钮
    预期结果:提示账号或密码错误(校验提示语)

    普通测试用例(非数据驱动的方式)

    import time
    import pytest, allure
    from PageObiects.loginPage import LoginPage
    
    
    class TestLoginCase():
        @allure.feature('登录')
        @pytest.mark.parametrize(['userid', 'password'], [('admin', '111111')])
        def test_login_001(self, userid, password):  # 正确的用
            test_loginpage = LoginPage()
            test_loginpage.login_host_(userid, password)
            time.sleep(2)
            assert test_loginpage.get_element_text(['css selector', 'a.active-tag']) == "首页"
            # 退出登录
            test_loginpage.logout()
    
        @pytest.mark.parametrize(['userid', 'password'],
                                 [('000026', 'comeon')])
        def test_login_002(self, userid, password):  # 正确的用例
            test_loginpage = LoginPage()
            test_loginpage.login_host_(userid, password)
            time.sleep(2)
            assert test_loginpage.get_element_text(['id', 'content_ics']) == "用户名或密码错误,请重新输入!"
    
    
    if __name__ == '__main__':
        pytest.main(['-sv', __file__])
        pytest.main(['test_login.py','-s', '--alluredir=outFlies/reports'])
    

    采用数据驱动的方式(数据分离)
    数据使用yaml文件封装(test_login_fail_data.yaml),格式如下:

    # 这里数据有几个,对应用例就有几个参数,需要一一对应,否则正不正确
    # 用户名正确,密码错误,提示的元素1,密码不正确
    # 用户名正确,密码正确,提示的元素2,首页
    - ['admin','111111',['css selector','a.active-tag'],'首页']   # 不添加优先级和用例名称
    - ['admin','1111',['id','content_ics'],'用户名或密码错误,请重新输入!']
    - ['adin','1111',['id','content_ics'],'用户名或密码错误,请重新输入!']
    

    测试用例的编写如下:

    import os
    import pytest, allure, time
    from PageObiects.loginPage import LoginPage
    from configs.env import Env
    from utils.handle_path import SMP_Path
    from utils.handleyaml import get_yaml_data
    
    
    class TestLoginCase1():
        # 使用数据封装的方式写测试用例
        test_login_fail_data1 = get_yaml_data(SMP_Path.testDatas_path / 'test_login_fail_data.yaml')
        test_login_fail_data2 = get_yaml_data(SMP_Path.testDatas_path / 'test_login_all_data.yaml')
    
        @allure.epic('供应商自管理UI自动化测试')  # 第一层
        @allure.feature('用户管理模块测试')
        @allure.story('登录测试用例')
        @pytest.mark.parametrize('userid, password, locator,expected_text', test_login_fail_data1)
        def test_login_001(self, userid, password, locator, expected_text):  # 不添加优先级和用例名称
            with allure.step('1.打开浏览器'):
                test_loginpage = LoginPage()
            with allure.step('2.打开并登录供应商自管理系统'):
                test_loginpage.login_host_(userid, password)
                time.sleep(2)
            with allure.step('3.断言'):
                assert test_loginpage.get_element_text(locator) == expected_text
            # 登录成功的用例需要退出,不成功的不需要退出,需要判断当前的url是否切换到了首页,若切换了,则代表登录成功了
            with allure.step('4.断言后的处理'):
                if test_loginpage.driver.current_url == Env.MAINPAGE_URL:
                    test_loginpage.logout()
            # 如果只是断言失败,也需要做退出登录的操作,可以使用pytest.assume做断言:
            # with pytest.assume: assert test_loginpage.get_element_text(locator) == expected_text
    
        pytest.mark.skip('添加优先级和用例名称的先跳过')
        @pytest.mark.parametrize('priority', 'case_title', 'userid, password, locator,expected_text', test_login_fail_data2)
        def test_login_002(self, priority, case_title, userid, password, locator, expected_text):  # 添加优先级和用例名称
            allure.dynamic.title(case_title)
            allure.dynamic.severity(priority)
            with allure.step('1.打开浏览器'):
                test_loginpage = LoginPage()
            with allure.step('2.打开并登录供应商自管理系统'):
                test_loginpage.login_host_(userid, password)
                time.sleep(2)
            with allure.step('3.断言'):
                assert test_loginpage.get_element_text(locator) == expected_text
            with allure.step('4.断言后的处理'):
                if test_loginpage.driver.current_url == Env.MAINPAGE_URL:
                    test_loginpage.logout()
    
    
    if __name__ == '__main__':
        #  执行用例时,可能不需要全部执行,因此可以用过用例的优先级去挑选需要执行的用例
        pytest.main(['-sv', __file__, '--alluredir', SMP_Path.reports_path, '--clean-alluredir'])
        os.system(f'allure serve {SMP_Path.reports_path}')
    
    

    在上面的示例中, 如果断言失败,也需要做退出登录的操作,可以使用pytest.assume做断言:

    with pytest.assume: assert test_loginpage.get_element_text(locator) == expected_text
    

    运行后,可以得到一个allure报告,按照运行后的链接打开即可查看

    相关文章

      网友评论

          本文标题:Selenium(8)-webUI自动化的测试用例编写

          本文链接:https://www.haomeiwen.com/subject/paypfjtx.html