最后我们要把所有的元素定位、页面操作、测试数据,结合起来。这里我用的pytest单元测试框架,也可以用unittest来进行,但是unittest用来做web单元测试不太好用。
首先:
我们在TestData创建一个pytest.ini的配置文件(有无可无,看自己需要。),创建一个打标签的元素
其次我们在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()
运行结果:
pytest疑问:
为什么我的pytest运行不了
1.查看当前项目的文件夹有没有__init__.py文件,要是没有,都去新建一个。因为pytest要求每个文件夹必须都是Pyton Package文件
2.把当前项目下的所有__pycache__文件删掉。这是个缓存文件。