pytest文檔30-功能用例與自動化用例完美對接(allure)


前言

做自動化做久了,經常會思考一個問題,到底別人是怎么做的自動化,跟自己的有啥不一樣,看過不少書和資料,都是停留在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

測試報告

接着查看運行結果的測試報告,展示效果如下

這樣我們只需拿着測試報告,就可以交出完美的答案了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM