python项目实践_pytest+python 项目初步实践

前言:在使用unittest 框架时,发现其两个缺点:

1、unittest 中每个测试用例执行时都要重新打开浏览器,无法实现一次性加载浏览器来执行所有用例(如:登录--》执行所有用例--》退出);

2、unittest框架局限性,driver不能跨py模块使用。

为了解决以上问题,于是就去学习了pytest框架并做了初步实践,如果写的不好,还请大家多指教!

场景及操作步骤:

1、登录(需要输入用户名、密码,点击登录按钮;登录成功后获取登录结果)

2、新建用户 (登录以后可以新建用户)

3、关闭浏览器

一、pytest 的安装

1、安装

命令:pip install -U pytest

20191231192733975185.png

2、查看版本

命令:pip show pytest

20191231192734473251.png

二、编写代码

1、项目目录

case : 存放测试用例

common : 存放公共文件

page: 封装页面业务

20191231192734670524.png

2、base.py 文件,封装基本操作方法

#-*- coding=utf-8 -*-

from selenium.webdriver.support.ui importWebDriverWaitfrom selenium importwebdriverfrom selenium.webdriver.support importexpected_conditions as ECfrom selenium.common.exceptions importTimeoutExceptionclassBase(object):def __init__(self, driver):

self.driver=driverdeffind(self, locator):"""locator = ("id","kw"),查找某元素"""

try:

element= WebDriverWait(self.driver, 10, 1).until(lambda x: x.find_element(*locator))returnelementexceptTimeoutException as msg:print("元素不存在")defsend(self, locator, text):"""输入框传值,元素不存在时跳过执行"""

try:

self.find(locator).clear()

self.find(locator).send_keys(text)exceptTimeoutException as msg:#print("元素不存在",msg)

pass

defclick(self,locator):"""点击事件"""self.find(locator).click()

3、login.py 文件,登录的业务代码

20191231192734791622.png

#-*- coding=utf-8 -*-

from selenium importwebdriverimporttimefrom common.base importBaseclassLogin(Base):deflogin(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).textprint(‘已成功登录‘, res)if __name__ == ‘__main__‘:

driver=webdriver.Chrome()

url= ""driver.get(url)

4、adduser.py 文件 登录后添加用户的业务代码

20191231192734987919.png

#-*- coding=utf-8 -*-

from selenium importwebdriverimporttimefrom common.base importBaseimporttimeclassAddUser(Base):defadd_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 -*-

importpytestfrom selenium importwebdriverfrom page.login importLoginimporttime

@pytest.fixture(scope=‘session‘)defdriver():global_driverprint(‘------------open browser------------‘)

_driver=webdriver.Chrome()

_driver.maximize_window()

_driver.implicitly_wait(10)yield_driverprint(‘------------close browser------------‘)

_driver.quit()

@pytest.fixture(scope=‘session‘)deflogin(driver):"""登录"""url= "登录的url地址"driver.get(url)

time.sleep(5)

login_system=Login(driver)

login_system.login("13166666666", "666666")yielddriver.delete_all_cookies()

6、测试用例文件:test_user_one.py、test_user_two.py ,两个文件内容一样,只是模拟两个用例。

importpytestfrom page.adduser importAddUserclassTestOne(object):deftest_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 (运行单个用例)

20191231192735232069.png

-s : 显示打印信息

20191231192735734041.png

原文:https://www.cnblogs.com/yudx/p/12126455.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值