Python 자동 테스트 5개 모델

I. 소개

자동화된 테스트에서는 키워드 기반 모델과 같이 자동화된 스크립트가 속한 프레임워크 모델을 분류하는 경우가 많습니다.

이 기사에서는 실제 자동화 테스트에서 Python 자동화 테스트의 5가지 모델(선형 모델, 모듈 기반 모델, 데이터 기반 모델, 키워드 기반 모델, 동작 기반 모델)을 나열합니다.

2. 선형 모델

스크립트를 기록하거나 작성함으로써 스크립트는 시나리오(완전한 기능 작업 집합)를 완성하고 스크립트를 재생하여 테스트를 자동화합니다.

스크립트 코드:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(30)

driver.get('https://www.baidu.com/')
time.sleep(1)
driver.find_element_by_id('kw').send_keys('自动化测试')
time.sleep(1)
driver.find_element_by_id('su').click()
time.sleep(1)
driver.quit()

3. 모듈형 드라이브 모델

스크립트에서 재사용 가능한 부분을 꺼내 공통 모듈로 작성하고 필요할 때 호출하면 테스터의 스크립트 작성 효율성이 크게 향상될 수 있습니다.

프레임워크 디렉터리:

자동화 테스트를 배우고 싶다면 여기에서 비디오 세트를 추천합니다. 이 비디오는 스테이션 B의 전체 네트워크에 대한 최초의 인터페이스 자동화 테스트 튜토리얼이라고 할 수 있습니다. 동시에 온라인 사용자 수는 1,000에 도달했으며 수집할 메모와 다양한 Lu Dashen 기술 교환: 798478386      

[업데이트] 스테이션 B에서 가르치는 Python 인터페이스 자동화 테스트를 위한 가장 상세한 실무 튜토리얼 모음(실전 최신 버전)_哔哩哔哩_bilibili [업데이트] Python 자동화 테스트를 위한 가장 상세한 실무 튜토리얼 모음 스테이션 B에서 가르치는 인터페이스(실전 전투) 최신 버전)에는 1. 인터페이스 자동화에서 인터페이스 자동화를 수행해야 하는 이유, 2. 인터페이스 자동화에 대한 요청의 전반적인 관점, 3. 인터페이스 전투에서의 인터페이스 총 200개의 비디오가 있습니다. 인터페이스 자동화 등. UP은 더 흥미로운 동영상을 호스팅합니다. UP 계정에 주목하세요. https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a  1. config는 구성 파일을 저장합니다.

예를 들어 base_data.json 파일은 테스트 주소를 저장합니다.

{
  "url": "https://www.baidu.com/"
}

 2. 데이터 저장소 테스트 데이터.

3. 드라이버는 브라우저 드라이버 파일을 저장합니다.

4. 보고서는 실행 후 테스트 보고서를 저장합니다.

5. 테스트는 테스트 케이스를 저장합니다.

(1) 케이스 테스트 케이스 단계.

예를 들어 testSearch.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
import os
import unittest
from selenium import webdriver
from AutomatedTestModel.ModularDriverModel.utils.ReadConfig import ReadConfig
from AutomatedTestModel.ModularDriverModel.test.pages.searchPage import SearchPage

class TestSearch(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(30)

    def tearDown(self):
        self.driver.quit()

    def get_url(self):
        current_path = os.path.abspath((os.path.dirname(__file__)))
        data = ReadConfig().read_json(current_path + "/../../config/base_data.json")
        return data['url']

    def test_search(self):
        url = self.get_url()
        self.driver.get(url)
        time.sleep(1)
        search = SearchPage(self.driver)
        search.search('自动化测试')

if __name__ == '__main__':
    unittest.main()

 (2) 일반 상점 공개 방법 등

(3) 페이지는 페이지 요소와 페이지 작업을 저장합니다.

예를 들어 searchPage.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time

class SearchPage:
    def __init__(self, driver):
        self.driver = driver

    def search_element(self):
        self.kw = self.driver.find_element_by_id('kw')
        self.su = self.driver.find_element_by_id('su')

    def search(self, data):
        self.search_element()
        self.kw.send_keys(data)
        time.sleep(1)
        self.su.click()

(4) Runner는 실행 중인 스크립트를 저장합니다.

예를 들어 main.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import time
import unittest
from AutomatedTestModel.ModularDriverModel.utils.HwTestReport import HTMLTestReport

class Main:
    def get_all_case(self):
        current_path = os.path.abspath(os.path.dirname(__file__))
        case_path = current_path + '/../case/'
        discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py")
        print(discover)
        return discover

    def set_report(self, all_case, report_path=None):
        if report_path is None:
            current_path = os.path.abspath(os.path.dirname(__file__))
            report_path = current_path + '/../../report/'
        else:
            report_path = report_path

        # 获取当前时间
        now = time.strftime('%Y{y}%m{m}%d{d}%H{h}%M{M}%S{s}').format(y="年", m="月", d="日", h="时", M="分", s="秒")
        # 标题
        title = u"搜索测试"
        # 设置报告存放路径和命名
        report_abspath = os.path.join(report_path, title + now + ".html")
        # 测试报告写入
        with open(report_abspath, 'wb') as report:
            runner = HTMLTestReport(stream=report,
                                    verbosity=2,
                                    images=True,
                                    title=title,
                                    tester='Meng')
            runner.run(all_case)

    def run_case(self, report_path=None):
        all_case = self.get_all_case()
        self.set_report(all_case, report_path)

if __name__ == '__main__':
    Main().run_case()

6. Utils는 공개 메소드를 저장합니다.

보고서 스타일 내보내기, 구성 파일 읽기 등

7. run.py 스크립트를 실행합니다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from AutomatedTestModel.ModularDriverModel.test.runner.main import Main

if __name__ == '__main__':
    Main().run_case()

실행 후 테스트 보고서. 

4. 데이터 기반 모델

모델은 데이터의 변화에 ​​따라 테스트 결과의 변화를 가져오는데, 이는 분명 매우 진보된 개념이자 아이디어입니다. 간단히 말해서, 모델은 데이터의 매개변수적 표현입니다. 즉, 프로그램 실행을 구동하기 위해 다양한 매개변수를 입력하고 다양한 테스트 결과를 출력하는 것입니다.

프레임워크 디렉터리:

 1. 케이스는 테스트 케이스 단계를 저장합니다.

 

2. 공용점포 공개방법 등

Excel 방법 읽기, 보고서 및 기타 스타일 생성 등.

3. 데이터 저장소 테스트 데이터 및 예상 결과.

 

 

4. 보고서는 실행 후 테스트 보고서를 저장합니다.

보고서 성과를 엽니다.

5. RunMain.py가 스크립트를 실행합니다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, time, unittest
from AutomatedTestModel.DataDrivenModeling.common.HwTestReport import HTMLTestReport

class RunMain:
    def get_all_case(self):
        case_path = os.getcwd()
        discover = unittest.defaultTestLoader.discover(case_path,
                                                       pattern="Test*.py")
        print(discover)
        return discover

    def set_report(self, all_case, report_path=None):
        if report_path is None:
            current_path = os.path.abspath(os.path.dirname(__file__))
            report_path = current_path + '/report/'
        else:
            report_path = report_path

        # 获取当前时间
        now = time.strftime('%Y{y}%m{m}%d{d}%H{h}%M{M}%S{s}').format(y="年", m="月", d="日", h="时", M="分", s="秒")
        # 标题
        title = u"搜索测试"
        # 设置报告存放路径和命名
        report_abspath = os.path.join(report_path, title + now + ".html")
        # 测试报告写入
        with open(report_abspath, 'wb') as report:
            runner = HTMLTestReport(stream=report,
                                    verbosity=2,
                                    images=True,
                                    title=title,
                                    tester='Meng')
            runner.run(all_case)

    def run_case(self, report_path=None):
        all_case = self.get_all_case()
        self.set_report(all_case, report_path)

if __name__ == "__main__":
    RunMain().run_case()

 5. 키워드 중심 모델

키워드를 변경하여 테스트 결과를 변경하는 기능적 자동화 테스트 모델입니다. QTP(UFT), Robot Framework 등은 모두 키워드 중심의 자동화된 테스트 도구인데, 이러한 도구의 대표적인 특징은 사용하기 쉬운 시각적 인터페이스 세트를 갖추고 있다는 것입니다. 할거야? 누구에게? 어떻게 하나요?

프레임워크 디렉터리:

1. Action은 주로 액션 이벤트와 요소 연산을 저장합니다.

(1) Action.py 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from AutomatedTestModel.KeywordDrivenModel.common.ExcelUtil import ExcelUtil
from AutomatedTestModel.KeywordDrivenModel.action.ElementOperation import ElementOperation

class Action:
    def __init__(self):
        self.element = ElementOperation()

    def set_value(self, element, action, parameter=None):
        if element == "browser":
            return self.element.browser_operate(action, parameter)
        elif element == "time":
            return self.element.time_operate(action, parameter)
        elif element is None or element == "":
            return
        else: # 如果不是其他的关键字,则默认为定位的元素
            return self.element.element_operate(element, action, parameter)

    def case_operate(self, excel, sheet):
        all_case = ExcelUtil(excel_path=excel, sheet_name=sheet).get_case()
        for case in all_case:
            self.set_value(case[0], case[1], case[2])

if __name__ == '__main__':
    excel = '../case/casedata.xlsx'
    Action().case_operate(excel=excel, sheet='搜索')

(2) ElementOperation.py

 

2. 케이스는 테스트 케이스 단계를 저장합니다.

 

 

3. 공용점포 공개방법 등

Excel 방법 읽기 등

4. RunMain.py가 스크립트를 실행합니다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from AutomatedTestModel.KeywordDrivenModel.action.Action import Action

if __name__ == '__main__':
    excel = 'case/casedata.xlsx'
    a = Action().case_operate(excel=excel, sheet='搜索')

6. 행동 중심 모델

행동 중심 개발(Behavior Driven Development, BDD라고도 함), 즉 사용자의 요구에서 시작하여 시스템 동작을 강조하는 것입니다. 자동화 테스트에서 BDD를 참조용으로 사용하여 행위 중심 테스트 모델을 생성하는데, 이 모델은 자연 설명 언어를 사용하여 자동화 테스트 스크립트를 결정하며, 테스트 케이스를 자연어로 작성할 수 있다는 장점이 있습니다.

프레임워크 디렉터리:

1. 매장 사용 사례를 소개합니다.

 

(1) 단계 저장 단계 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
from behave import *

@When('打开访问的网页 "{url}"')
def step_open(context, url):
    context.driver.get(url)
    time.sleep(5)

@Then('进入百度网站成功')
def step_assert_open(context):
    title = context.driver.title
    assert title == "百度一下,你就知道"

@When('输入 "{searchdata}"')
def step_search(context, searchdata):
    searchdata_element = context.driver.find_element_by_id('kw')
    searchdata_element.send_keys(searchdata)
    time.sleep(1)
    submit_btn = context.driver.find_element_by_id('su')
    submit_btn.click()

@Then('获取标题')
def step_assert_search(context):
    success_message = context.driver.title
    assert success_message == "自动化测试_百度搜索"

(2) Environment.py는 변수를 저장합니다.

(3) search.feature 저장 동작

 2. 보고서 및 결과 저장소 보고서.

 

 

추천

출처blog.csdn.net/m0_73409141/article/details/132343507