PO模式 - TestCases测试用例,集成pytest

最后我们要把所有的元素定位、页面操作、测试数据,结合起来。这里我用的pytest单元测试框架,也可以用unittest来进行,但是unittest用来做web单元测试不太好用。

首先:
我们在TestData创建一个pytest.ini的配置文件(有无可无,看自己需要。),创建一个打标签的元素
PO模式 - TestCases测试用例,集成pytest_第1张图片

其次我们在TestCases里创建一个conftest.py的一个文件,用在于编写前置条件和后置条件

import pytest
from selenium import webdriver
from PO.Common.config import url_config


@pytest.fixture(scope="function")
def search_baidu():
    driver = webdriver.Chrome()
    driver.get (url_config.get ('excel_re', 'url'))
    driver.maximize_window()
    yield driver #yield往上是前置条件,往下是后置条件。且yield也是个返回值跟return差不多
    driver.quit()

最后,我们在TestCases创建test_baidu.py。必须以test__test方式来命名,学过unittest和pytest的人都知道。要不然pytest找不到这个文件,导致无法运行
这个test_baidu.py是测试用例了,就是把我们之前的元素定位和页面操作、测试数据集合在一起。

import pytest


from PO.PageObjects.baidu_page import WebBaidu
from PO.PageObjects.baidu_search_result_page import WebBaiduSousu
from PO.TestDatas import baidu_datas as loc




class TestBaidu():
    @pytest.mark.usefixtures("search_baidu")
    @pytest.mark.index
    def test_baidu_0(self,search_baidu):
        WebBaidu(search_baidu).baidu_login(loc.baidu_data["baidu"])
        assert loc.baidu_data["check"] == WebBaiduSousu(search_baidu).baidu_sousu()


    @pytest.mark.usefixtures ("search_baidu")
    @pytest.mark.parametrize("data",loc.baidu_2_data)
    def test_baidu_1(self,search_baidu,data):
        WebBaidu(search_baidu).baidu_login(data["baidu"])
        assert data["check"] == WebBaiduSousu(search_baidu).baidu_sousu()

运行结果:
PO模式 - TestCases测试用例,集成pytest_第2张图片
pytest疑问:
为什么我的pytest运行不了
1.查看当前项目的文件夹有没有__init__.py文件,要是没有,都去新建一个。因为pytest要求每个文件夹必须都是Pyton Package文件
2.把当前项目下的所有__pycache__文件删掉。这是个缓存文件。

你可能感兴趣的:(python,selenium)