• allure-pytest 功能用例与自动化用例完美对接


    前言

    做自动化做久了,经常会思考一个问题,到底别人是怎么做的自动化,跟自己的有啥不一样,看过不少书和资料,都是停留在demo的层面。
    真正把自动化做的好的大牛又不屑于分享自己的劳动成果,所以大部分情况就是一群菜鸡在群里互啄,停留在初级入门的demo层面上。
    到底自动化要达到什么样的效果呢?这里我把最近的研究成果分享下,有经验的小伙伴也可以一起交流下。

    功能用例

    我一直认为一切的自动化用例是基于功能测试用例的, 脱离了功能测试用例,你的代码写的再漂亮,那也仅仅是show代码的。
    面试的时候经常会遇到一个问题,一般领导型的面试官会问:你们自动化做到了什么程度?自动化用例覆盖率达到了多少?

    自动化用例覆盖率是一个很好的衡量标准,比如你功能测试用例有100条,你的自动化用例写了90条,用例覆盖率是90%?当然不是!!!
    你的自动化用例如果跟功能用例搭不上边,那都是无效用例,覆盖率也许是0%,仅仅是你自己瞎写的!

    所以自动化用例是去翻译你的功能用例 ,一个一个去覆盖,让功能case,变成自动化用例的case,一一对应起来的(没写过功能用例的,后面就不用看了)。

    写功能用例的平台有很多,比如jira,禅道,testlink等,这里以禅道系统为例,比如我的"编辑文章分类"模块下了3个用例

    其中的一条用例是这样的,有前置条件,用例的步骤和期望结果,这才是一个标准的用例

    自动化用例

    功能用例写完之后,接着是如何去用代码去实现功能用例,这里用的是pytest框架+allure报告,其中一条用例的部分代码应该如下

    • feature 对应模块名称
    • story 对应用例的标题
    • testcase 对应禅道系统的bug用例url地址,关联起来
    • issue 如果这个用例有bug,应该关联对应的bug地址
    • 用例描述: 对应def下的描述步骤
    import allure
    # 上海-悠悠,QQ交流群:750815713
    # 博客地址:https://www.cnblogs.com/yoyoketang/
    
    @allure.feature("编辑分类文章")
    class TestArticleclassify():
        '''编辑文章分类'''
    
    
        @allure.story("登录-编辑文章分类,重复保存,保存失败")
        @allure.issue("http://49.235.92.12:8080/zentao/bug-view-1.html")  # 禅道bug地址
        @allure.testcase("http://49.235.92.12:8080/zentao/testcase-view-5-1.html")  # 禅道用例连接地址
        def test_edit_classify5(self, login):
            '''用例描述:编辑文章分类-输入重复的分类,保存失败,不能添加重复的
            setup: 登录login
            step1: 编辑文章分类,输入文章类别,如:计算机
            step2: 点保存按钮
            step3: 重新打开编辑页,输入:计算机
            step4: 再次点保存按钮
            assert: 保存失败,提示:已存在
            '''
            driver = login
            edit = ArticleclassifyPage(driver)
            edit.click_classify_nav()
            edit.edit_classify("计算机")
            res2 = edit.is_edit_classify_success("计算机")
            print("编辑是否成功:%s"%res2)
            assert res2  # 断言

    前置条件:login,应该是单独抽出来的写到conftest.py,作为一个前置fixture功能

    import pytest
    from selenium import webdriver
    from pages.login_page import LoginPage
    import time
    # 上海-悠悠,QQ交流群:750815713
    # 博客地址:https://www.cnblogs.com/yoyoketang/
    
    # request 内置的fixture
    
    @pytest.fixture(scope="session")
    def driver(request):
        '''只打开浏览器和关闭浏览器'''
        driver = webdriver.Chrome()
        driver.maximize_window() # 最大化
    
        def end():
            print("全部用例执行完后 teardown quit dirver")
            time.sleep(5)
            driver.quit()
    
        request.addfinalizer(end)
        return driver
    
    @pytest.fixture(scope="session")
    def login(driver):
        web = LoginPage(driver)
        web.login()
        return driver
    

    LoginPage 页面的封装,可以添加操作步骤,step对应每个步骤,我这里登录几个步骤写一起了,也可写的更详细

    # 上海-悠悠,QQ交流群:750815713
    # 博客地址:https://www.cnblogs.com/yoyoketang/
    
    class LoginPage(Base):
    
        loc_用户名 = ("id", "id_username")
        loc_密码 = ("id", "id_password")
        loc_登录按钮 = ("xpath", "//*[text()='登录']")
    
        # 判断登录成功
        loc_后台页面 = ("xpath", "//*[text()='后台页面']")
    
        @allure.step("登录")
        def login(self, username="admin", password="yoyo123456"):
            '''登录'''
            self.driver.get(login_url)
            self.send(self.loc_用户名, username)
            self.send(self.loc_密码, password)
            self.click(self.loc_登录按钮)
    
        @allure.step("登录结果判断")
        def is_login_success(self):
            '''判断是否登录成功 True  False'''
            result = self.is_element_exist(self.loc_后台页面)
            return result

    测试报告

    接着查看运行结果的测试报告,展示效果如下

    这样我们只需拿着测试报告,就可以交出完美的答案了!

    转载至:https://www.cnblogs.com/yoyoketang/p/12005288.html

  • 相关阅读:
    分享一份Java架构师学习资料,2019年最新整理!
    Spring Boot 最核心的 25 个注解,都是干货!
    推荐一款接口 API 设计神器!
    题库
    杂乱的知识点
    mysql查询疯狂41例
    mysql你问我答
    可能出现的面试题
    SQLALchemy
    基于蓝图的完整的Flask项目
  • 原文地址:https://www.cnblogs.com/123blog/p/12499770.html
Copyright © 2020-2023  润新知