pytest和unittest项目结构实例,包括base、config、data、page、test_page几部分。
base(基类文件夹)
---base_page.py
config(配置文件夹)
---yaml_util.py
data(测试数据)
---search.yaml
page(页面文件夹)
---search.py
test_case(测试用例)
---test_case.py
---test_case1.py
---test_case2.py
---test_case3.py
# base_page.py
# 主要把常用的内容封装起来
class Tools:
# 浏览器
# driver = webdriver.Chrome()
# 初始化浏览器
def __init__(self, driver):
self.driver = driver
# 访问
def open(self, url):
self.driver.get(url)
# 元素定位 *解包元祖
def locator(self, loc):
return self.driver.find_element(*loc)
# 输入定位
def input(self, loc, txt):
self.locator(loc).send_keys(txt)
# 点击
def on_click(self, loc):
self.locator(loc).click()
# 等待
def wait(self):
self.driver.sleep(3)
# 关闭
def quit(self):
self.driver.quit()
# yaml_util.py
# 读取yaml数据
import yaml
def loadyaml(filename):
files = open(filename, 'r', encoding='utf-8')
data = yaml.load(files, Loader=yaml.FullLoader)
return data
# 测试读取yaml文件
# data = loadyaml('../data/search.yaml')
# print(data)
# search.yaml
-
search_name: python
# search.py
# 搜索页面
from selenium import webdriver
from base.base_page import Tools
from selenium.webdriver.common.by import By
class SearchPage(Tools):
# 页面地址、页面元素、页面流程
url = 'http://www.baidu.com'
search_input = (By.ID, 'kw')
search_btn = (By.ID, 'su')
def search(self, txt):
self.open(self.url)
self.input(self.search_input, txt)
self.on_click(self.search_btn)
# if __name__ == '__main__':
# driver = SearchPage(webdriver.Chrome())
# driver.search('python')
# test_case.py
# 测试用例 unittest
import unittest
from selenium import webdriver
from time import sleep
from page.search import SearchPage
# 必须继承unittest.TestCase
class TestCase(unittest.TestCase):
# 用例执行前要做的事情 打开浏览器
@classmethod
def setUpClass(cls) -> None:
cls.driver = webdriver.Chrome()
cls.sp = SearchPage(cls.driver)
# 用例执行后要做的事情 关闭浏览器
@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()
# 用例 一个test代表一个测试用例
def test_01(self):
self.sp.search('python')
sleep(5)
# 测试整个过程
if __name__ == '__main__':
unittest.main()
# test_case1.py
# 测试用例 unittest和使用yaml
import unittest
from selenium import webdriver
from time import sleep
from ddt import ddt, file_data
from page.search import SearchPage
# 必须继承unittest.TestCase
@ddt()
class TestCase(unittest.TestCase):
# 用例执行前要做的事情 打开浏览器
@classmethod
def setUpClass(cls) -> None:
cls.driver = webdriver.Chrome()
cls.sp = SearchPage(cls.driver)
# 用例执行后要做的事情 关闭浏览器
@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()
# 用例 一个test代表一个测试用例
@file_data("../data/search.yaml")
def test_01(self, search_name):
self.sp.search(search_name)
sleep(5)
# 测试整个过程
if __name__ == '__main__':
unittest.main()
# test_case2.py
# 测试用例 pytest
import pytest
from selenium import webdriver
from time import sleep
from page.search import SearchPage
class TestCase:
# 用例执行前要做的事情 打开浏览器
def setup_class(self):
self.driver = webdriver.Chrome()
self.sp = SearchPage(self.driver)
# 用例执行后要做的事情 关闭浏览器
def teardown_class(self):
self.driver.quit()
# 用例 一个test代表一个测试用例
def test_01(self):
self.sp.search('python')
sleep(5)
# 测试整个过程
if __name__ == '__main__':
pytest.main()
# test_case3.py
# 测试用例 pytest和使用yaml
import pytest
from selenium import webdriver
from time import sleep
from config.yaml_util import loadyaml
from page.search import SearchPage
class TestCase:
# 用例执行前要做的事情 打开浏览器
def setup_class(self):
self.driver = webdriver.Chrome()
self.sp = SearchPage(self.driver)
# 用例执行后要做的事情 关闭浏览器
def teardown_class(self):
self.driver.quit()
# 用例 一个test代表一个测试用例
@pytest.mark.parametrize('udata', loadyaml('../data/search.yaml'))
def test_01(self, udata):
self.sp.search(udata['search_name'])
sleep(5)
# 测试整个过程
if __name__ == '__main__':
pytest.main()
网友评论