소프트웨어 테스트 프레임워크 전투: Python+Slenium은 웹 자동화 테스트 프레임워크에 대한 전체 튜토리얼을 구축합니다.

Python+Selenium은 실제 사용자 작업을 시뮬레이션하고 웹 페이지의 기능과 스타일을 확인할 수 있는 인기 있는 웹 자동화 테스트 프레임워크입니다. Selenium을 통해 웹페이지를 테스트하려면 다음 단계가 필요합니다.

Selenium 라이브러리와 브라우저 드라이버를 설치합니다.
브라우저 창 크기, 뒤로, 앞으로 등을 제어하려면 Selenium에서 제공하는 방법을 사용하십시오.
Selenium에서 제공하는 메소드를 사용하여 클릭, 입력 및 속성 가져오기와 같은 페이지 요소를 찾고 조작합니다.
단위 테스트, 로깅 시스템, 데이터베이스 및 기타 소프트웨어를 사용하여 데이터 기반 테스트 및 POM 디자인 패턴을 위해 셀레늄과 협력하십시오.

1. Selenium 라이브러리 및 드라이버 설치 방법

pip 명령을 사용하여 셀레늄 라이브러리를 설치합니다 . 예를 들어 명령줄에 다음을 입력할 수 있습니다.

pip install selenium

또는

pip3 install selenium

브라우저 드라이버를 다운로드하고 설치합니다. 예를 들어 Chrome 브라우저를 사용하는 경우 공식 웹사이트에서 해당 버전의 chromedriver를 다운로드하여 Python 설치 경로에 넣을 수 있습니다.

2. 셀레늄을 통해 브라우저를 제어하는 ​​구체적인 실행 방법

Selenium의 webdriver 모듈을 가져옵니다.

from selenium import webdriver

Chrome 브라우저를 여는 데 사용할 브라우저를 지정하는 webdriver 개체를 만듭니다. 그리고 webdriver 객체의 메소드를 이용하여 브라우저를 동작시킵니다.

web = webdriver.Chrome()

URL을 방문

web.get(url)

한발 물러서다

web.back()

사례 1: Selenium이 브라우저를 제어합니다.

셀레늄을 사용하여 Chrome 브라우저를 제어하고 Baidu 웹사이트를 열고 키워드를 입력하고 검색한 다음 브라우저를 닫고 싶다고 가정해 보겠습니다. 다음 코드를 참조할 수 있습니다.

#导入selenium的webdriver模块
from selenium import webdriver
 
#创建一个webdriver对象,指定使用Chrome浏览器
web = webdriver.Chrome()
 
#访问百度网站
web.get('https://www.baidu.com/')
 
#找到搜索框元素,并输入关键词
search_box = web.find_element_by_id('kw')
search_box.send_keys('selenium')
 
#找到搜索按钮元素,并点击
search_button = web.find_element_by_id('su')
search_button.click()
 
#关闭浏览器
web.quit()

3. Selenium이 페이지 요소를 찾고 조작하는 방법

Selenium은 다양한 방법을 사용하여 ID, 이름, 클래스 이름, CSS 선택기, 링크 텍스트, 태그 이름, xpath 등과 같은 페이지 요소를 찾고 조작할 수 있습니다. 요소의 속성이나 위치에 따라 적절한 방법을 선택할 수 있습니다.

사례 2: 페이지 위치 지정

예를 들어 Baidu 홈페이지에서 검색창을 찾으려면 다음과 같이 하세요.

#通过id定位
search_box = web.find_element_by_id('kw')
#通过name定位
search_box = web.find_element_by_name('wd')
#通过css选择器定位
search_box = web.find_element_by_css_selector('#kw')

텍스트를 입력하거나 버튼을 클릭하는 등 페이지 요소를 조작해야 하는 경우 다음 코드를 사용할 수 있습니다.

#在搜索框中输入文本
search_box.send_keys('selenium')
#找到搜索按钮并点击
search_button = web.find_element_by_id('su')
search_button.click()

사례 3: Selenium이 드롭다운 상자를 작동합니다.

선택 태그의 드롭다운 상자를 처리해야 하는 경우 Selenium에서 제공하는 선택 모듈을 사용할 수 있습니다. 여기에는 인덱스, 값 또는 텍스트 속성에 따라 드롭다운 상자에서 옵션을 선택하는 세 가지 방법이 있습니다.

예를 들어, 아래 드롭다운 상자에서 "Beijing" 옵션을 선택하려고 합니다.

<select id="city">
    <option value="sh">上海</option>
    <option value="bj">北京</option>
    <option value="gz">广州</option>
</select>

다음 코드를 사용할 수 있습니다:

#导入select模块
from selenium.webdriver.support.select import Select
#定位到下拉框元素
city = web.find_element_by_id('city')
#创建Select对象
select = Select(city)
#根据索引选择第二个选项(索引从0开始)
select.select_by_index(1)
#或者根据值选择'bj'选项
select.select_by_value('bj')
#或者根据文本属性选择'北京'选项
select.select_by_visible_text('北京')

드롭다운 상자, ul-li 태그의 드롭다운 상자와 같이 선택되지 않은 태그의 드롭다운 상자를 처리하려는 경우 마우스 클릭을 시뮬레이션하여 작업을 실현할 수 있습니다. 예를 들어, 아래 드롭다운 상자에서 "Python" 옵션을 선택하세요.

<div class="dropdown">
  <button class="btn btn-default dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">编程语言<span class="caret"></span></button>
  <ul class="dropdown-menu" role="menu" aria-labelledby="menu1">
    <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Java</a></li>
    <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Python</a></li>
    <li role="presentation"><a role="menuitem" tabindex="-1" href="#">C++</a></li>
  </ul>
</div>

이는 다음 코드를 사용하여 달성할 수 있습니다.

//定位到按钮元素并点击展开下拉框
WebElement button = driver.findElement(By.id("menu1"));
button.click();
//定位到列表元素并获取所有子元素(即选项)
WebElement list = driver.findElement(By.className("dropdown-menu"));
List<WebElement> options = list.findElements(By.tagName("li"));
//遍历所有子元素,找到文本为'Python'的选项并点击
for (WebElement option : options) {
    if (option.getText().equals("Python")) {
        option.click();
        break;
    }
}

4. 데이터 기반 테스트 및 POM 모드

단위 테스트, 로그 시스템, 데이터베이스 및 기타 소프트웨어를 사용하여 데이터 기반 테스트 및 POM 디자인 패턴을 위해 셀레늄과 협력하려면 다음 단계가 필요합니다.

1. 코드와 데이터를 분리하는 엔지니어링 구조를 구축하고, 각 페이지는 클래스에 해당합니다.

새 프로젝트를 만듭니다. 각 페이지는 패키지에 해당하며 각 패키지 아래에는 __init__.py 파일이 있습니다.
페이지 요소와 작업을 캡슐화하려면 각 패키지 아래에 클래스를 만듭니다.
상수 및 구성 정보를 저장하려면 루트 디렉터리에 baseinfo 폴더를 만듭니다.
테스트 케이스를 저장하기 위해 루트 디렉터리에 테스트 케이스 폴더를 만듭니다.
테스트 보고서를 저장하려면 루트 디렉터리에 보고서 폴더를 만듭니다.
2. 단위 테스트 프레임워크를 사용하여 테스트 사례를 구성 및 실행하고, setUp 및 TearDown 메서드를 사용하여 환경을 초기화하고 정리합니다.

unittest.main() 함수를 사용하면 현재 모듈에서 test로 시작하는 테스트 메서드를 자동으로 찾아서 실행합니다.
TestSuite 클래스를 사용하면 여러 테스트 케이스나 테스트 클래스를 테스트 스위트에 추가하고 TestRunner 클래스를 사용하여 실행할 수 있습니다. TestLoader 클래스를 사용하면
주어진 스키마나 디렉터리에 따라 테스트 케이스를 로드하고 TestSuite 객체를 반환할 수 있습니다.
discover() 함수를 사용하면 주어진 디렉토리에 있는 모든 테스트 케이스를 자동으로 발견하고 TestSuite 객체를 반환할 수 있습니다.
3. POM 디자인 패턴을 사용하여 페이지 요소와 작업을 캡슐화하고 페이지 개체를 테스트 사례에 대한 매개변수로 전달합니다.

페이지 클래스를 생성하고, 객체 클래스를 상속하며, 페이지 요소의 위치 지정자와 작업 방법을 정의합니다.
테스트 클래스를 만들고, unittest.TestCase 클래스를 상속하고, 페이지 클래스를 가져오고, setUp 메서드에서 브라우저 드라이버와 페이지 개체를 초기화합니다.
테스트 메서드에서 페이지 개체의 작업 메서드를 호출하고 어설션을 사용하여 테스트 결과를 확인합니다.
TearDown 메소드에서 브라우저 드라이버를 닫습니다.
4. DDT 또는 Yaml과 같은 도구를 사용하여 데이터베이스, Excel, CSV 등과 같은 외부 데이터 소스를 읽고 데코레이터 또는 매개 변수화 방법을 사용하여 테스트 사례를 구동합니다.

DDT 또는 Yaml과 같은 도구를 사용하여 외부 데이터 소스를 읽고 데코레이터 또는 매개변수화된 메서드를 사용하여 테스트 케이스를 구동하는 것은 테스트 데이터를 테스트 케이스 코드에서 분리하고 향후 유지 관리를 용이하게 할 수 있는 데이터 기반 테스트 방법입니다.

이러한 방식으로 Excel 데이터를 읽는 일반적인 단계는 다음과 같습니다.

테스트 데이터를 저장할 Excel 파일을 만듭니다. 각 행은 테스트 시나리오에 해당하고 각 열은 매개변수에 해당합니다.
Excel 파일을 읽고, openpyxl 라이브러리 또는 기타 라이브러리를 사용하여 Excel 파일을 조작하고, 목록 또는 사전 유형의 데이터를 반환하는 클래스를 만듭니다.
테스트 클래스를 만들고, unittest.TestCase 클래스를 상속하고, 클래스 앞에 @ddt 데코레이터를 사용합니다.
테스트 메서드 앞에 @data 또는 @file_data 데코레이터를 사용하고 Excel 파일을 읽는 클래스에서 반환된 데이터를 전달합니다.
테스트 메서드에서 매개변수를 정의하여 사용 사례 데이터를 수신하고, 요청 라이브러리 또는 기타 라이브러리를 호출하여 요청을 보내고, 어설션을 사용하여 응답 결과를 확인합니다.
DDT는 테스트 메소드를 꾸미는 데 사용할 수 있는 데이터 기반 테스트 데코레이터이며 매개변수는 파일 이름이나 목록입니다. 파일 유형은 json 또는 yaml일 수 있습니다. 파일이 리스트인 경우 리스트의 값은 테스트 케이스 매개변수로 사용되며, 동시에 테스트 케이스 메소드 이름의 접미사로 표시됩니다. 파일이 사전인 경우 사전의 키가 테스트 케이스 메소드의 접미어로 표시되고 사전의 값이 테스트 케이스 매개변수로 사용됩니다.

Yaml은 txt, excel, json과 유사한 데이터 형식입니다. 여기에는 맵 객체(키-값 쌍, 콜론 뒤에 공백이 필요함)와 목록 객체(-로 시작)라는 두 가지 데이터 유형만 있습니다. 읽고 나면 가변 길이의 사전 형태로 되어 있다.

사례 4: DDT Yaml 인터페이스 테스트

다음은 DDT 및 Yaml을 사용한 인터페이스 테스트를 위한 코드 예제입니다.

import unittest
from ddt import ddt,data,file_data
import requests
import yaml
 
@ddt
class TestApi(unittest.TestCase):
 
    @file_data('test_data.yml')
    def test_api(self,**kwargs):
        url = kwargs.get('url')
        method = kwargs.get('method')
        data = kwargs.get('data')
        expect = kwargs.get('expect')
 
        if method.lower() == 'get':
            res = requests.get(url,params=data)
        elif method.lower() == 'post':
            res = requests.post(url,data=data)
        else:
            res = None
 
        self.assertEqual(res.json(),expect)
 
if __name__ == '__main__':
    unittest.main()

test_data.yml 파일의 내용은 다음과 같습니다.

test_01:
  url: "http://httpbin.org/get"
  method: "get"
  data: {"name":"Tom","age":18}
  expect: {"args":{"age":"18","name":"Tom"},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Host":"httpbin.org","User-Agent":"python-requests/2.26.0","X-Amzn-Trace-Id":"Root=1-61d7f9c8-6a9b0e8a4f7c3b6d5e0a4f7c"},"origin":"223.104.63.230","url":"http://httpbin.org/get?name=Tom&age=18"}
test_02:
  url: "http://httpbin.org/post"
  method: "post"
  data: {"username":"admin","password":123456}
  expect: {"args":{},"data":"","files":{},"form":{"password":"123456","username":"admin"

마지막으로 제 글을 주의 깊게 읽어주신 모든 분들께 감사의 말씀을 전하고 싶습니다. 호혜는 언제나 필요합니다. 그다지 귀중한 것은 아니지만 필요하다면 가져갈 수 있습니다.

여기에 이미지 설명을 삽입하세요

소프트웨어 테스팅 인터뷰 애플릿

수백만 명의 사람들이 참여하는 소프트웨어 테스트 문제 은행! ! ! 누가 아는가! ! ! 전체 네트워크에서 가장 포괄적인 퀴즈 미니 프로그램으로, 지하철이나 버스에서 휴대폰을 사용하여 퀴즈를 풀 수 있습니다!

다음 인터뷰 질문 섹션을 다룹니다.

1. 소프트웨어 테스팅의 기본이론, 2. 웹, 앱, 인터페이스 기능 테스팅, 3. 네트워크, 4. 데이터베이스, 5. 리눅스

6. 웹, 앱, 인터페이스 자동화, 7. 성능 테스트, 8. 프로그래밍 기초, 9. 시간 인터뷰 질문, 10. 공개 테스트 질문, 11. 보안 테스트, 12. 컴퓨터 기초

이 자료는 [소프트웨어 테스트] 친구들을 위한 가장 포괄적이고 완전한 준비 창고가 되어야 합니다. 이 창고는 또한 가장 어려운 여정을 통해 수만 명의 테스트 엔지니어와 동행했습니다. 당신에게도 도움이 되기를 바랍니다!  

Supongo que te gusta

Origin blog.csdn.net/2301_78276982/article/details/132496558
Recomendado
Clasificación