Introduction: In use unittest framework, found two drawbacks:
1, unittest have to reopen the browser each test case is executed, can not be achieved disposable loading browser to perform all use cases (eg: Login - to "implement all use cases -" Exit);
2, unittest framework limitations, driver modules can span py.
To solve this problem, then went to study the pytest framework and made a preliminary practice, if badly written, but please enlighten!
Scene and steps:
1, log (need to enter a user name, password and click the login button; for login results after a successful login)
2, the new user (new user can log on later)
3, close the browser
A, pytest installation
1, the installation
Command: pip install -U pytest
2, view the version
Command: pip show pytest
Second, write code
1, the project directory
case: storage of test cases
common: public file storage
page: page Business Package
2, base.py files, basic operations of packaging
# -*- coding=utf-8 -*-
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
class Base(object):
def __init__(self, driver):
self.driver = driver
def find(self, locator):
"""locator = ("id","kw"),查找某元素"""
try:
element = WebDriverWait(self.driver, 10, 1).until(lambda x: x.find_element(*locator))
return element
except TimeoutException as msg:
print("元素不存在")
def send(self, locator, text):
"""输入框传值,元素不存在时跳过执行"""
try:
self.find(locator).clear()
self.find(locator).send_keys(text)
except TimeoutException as msg:
# print("元素不存在",msg)
pass
def click(self,locator):
"""点击事件"""
self.find(locator).click()
3、login.py 文件,登录的业务代码
# -*- coding=utf-8 -*-
from selenium import webdriver
import time
from common.base import Base
class Login(Base):
def login(self, username, password):
"""登录"""
user = ('name', 'loginName')
self.send(user, username)
pwd = ('name', 'loginPassWord')
self.send(pwd, password)
submit = ('id', 'loginBtn')
self.click(submit)
time.sleep(2)
content = ('id', 'title')
res = self.find(content).text
print('已成功登录', res)
if __name__ == '__main__':
driver = webdriver.Chrome()
url = ""
driver.get(url)
4、adduser.py 文件 登录后添加用户的业务代码
# -*- coding=utf-8 -*-
from selenium import webdriver
import time
from common.base import Base
import time
class AddUser(Base):
def add_user(self, user, phone, password, repassword):
"""登录后添加用户"""
yonghu = ('id', 'uname')
self.send(yonghu, user)
shouji = ('id', 'uphone')
self.send(shouji, phone)
mima = ('id', 'password')
self.send(mima, password)
remima = ('id', 'password2')
self.send(remima, repassword)
time.sleep(1)
button = ('id', 'savebtn2')
self.click(button)
if __name__ == '__main__':
driver = webdriver.Chrome()
url = ""
driver.get(url)
5、conftest.py 文件
# -*- coding=utf-8 -*-
import pytest
from selenium import webdriver
from page.login import Login
import time
@pytest.fixture(scope='session')
def driver():
global _driver
print('------------open browser------------')
_driver = webdriver.Chrome()
_driver.maximize_window()
_driver.implicitly_wait(10)
yield _driver
print('------------close browser------------')
_driver.quit()
@pytest.fixture(scope='session')
def login(driver):
"""登录"""
url = "登录的url地址"
driver.get(url)
time.sleep(5)
login_system = Login(driver)
login_system.login("13166666666", "666666")
yield
driver.delete_all_cookies()
6、测试用例文件:test_user_one.py、test_user_two.py ,两个文件内容一样,只是模拟两个用例。
import pytest
from page.adduser import AddUser
class TestOne(object):
def test_01(self, login, driver):
url = "新增用户页面的url地址"
driver.get(url)
user = AddUser(driver)
user.add_user('test', '13122222224', '666666', '666666')
if __name__ == '__main__':
pytest.main(["-s", "test_user_one.py"])
三、运行测试用例
1、进入项目根目录
2、输入命令:
pytest case (运行多个测试用例)
pytest case/test_user_one.py (运行单个用例)
-s : 显示打印信息