赞
踩
Pyttest是Python的一个三方单元测试框架,相比与unitest更家简洁高效
编写好测试脚本
自动执行测试用例
自动生成测试报告
install pytest
import pytest#导包
def test_learn():
print('测试方法以test_开头')
assert 1
def test_learn2():
print('第二条测试用例也')
if __name__=='__main__':
pytest.main()
以test开头会显示一个这个图行
一些详细参数
-s:输出调试信息,包括print打印的信息。
-v:显示更详细的信息。
-n=num:启用多线程或分布式运行测试用例。
-k=value:用例的nodeid包含value值则用例被执行。
-m=标签名:执行被 @pytest.mark.标签名 标记的用例。
-x:只要有一个用例执行失败就停止当前线程的测试执行。
–maxfail=num:与-x功能一样,只是用例失败次数可自定义。
–reruns=num:失败用例重跑num次。需要安装 pytest-rerunfailures 插件模块。
主函数
pytest.main()
if __name__=='__main__':
pytest.main()
命令模式
pytest -参数 文件名
执行指定的测试用例
pytest -sv 用例文件名 ::文件中的测试函数名
setup()可以理解为前置条件,用例在执行前需要的操作
teardown用例执行完后所进行的操作
1:setup_module和teardown_module,在整个测试用例所在的文件中所在的文件中所有的方法运行前和运行后运行,只运行一次—模块的
2:setup_class和teardown_class,在整个测试文件中的一个class中所有的用例的签后运行 ----class类
3:setup_method和teardown_method,在class内的每个方法运行前运行 ---------方法的
4:setup_function和teardown_function,在非class下属的每个测试方法的前后运行 ----函数的分层分级(不同级别有不同方法)
setup(),teardown()写在类外,则是以类为单位执行前后
import pytest#导包 def setup(): print('前置条件') class Test_login: # def setup_method(self): # print('方法中的前置条件---') # def teardown_method(self): # print('方法中的后置运行---') def test_learn(slef): print('第一条case') assert 1+1==2 def test_learn2(self): print('第二条case') def teardown(): print('后置条件') class Test_register: def test_c1(self): print('register中的1哦') if __name__=='__main__': pytest.main(['-s'])
结果:
mark中使用run来设置用例的执行顺序
注意需要安装:pip install pytest-ordering,不然不起作用哦
mark中的skip()表示跳过该条用例
运行结果:
skipif()条件跳过
还有一个跳过skipif()条件跳过,里面有参数,需要满足什么条件可以跳过,同时也可以写跳过的原因reason=“***”
在这里插入代码片
import pytest#导包 class Test_login: # 多个数据参入 @pytest.mark.parametrize(['user', 'info'], [('user1', '是一名学生'), ('user2', '是一名职场人员')]) def test_learn(slef,user,info): print(f'用户{user},信息{info}') assert 1+1==2 # 单个数据参入 @pytest.mark.parametrize('score',[20,30]) def test_learn2(self,score): print(f'你的分数分别为{score}') # 数据参数是属于字典型 data=({'name':'明明','age':18 }, {'name':'聪聪','age':19}) @pytest.mark.parametrize('data',data) def test_learn3(self,data): print(f'你的名字叫{data["name"]},你的年龄是{data["age"]}') if __name__=='__main__': pytest.main(['-s'])
结果如下图
这里就记录一个漂亮的数据报告库Allure,其他的就不记录了
环境准备,安装allure-pytest
pip install allure-pytest -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
下载allure:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/2.13.2/
环境配置参考:一个网友分享教程
配置成功:
pytest.main([])
-m标记用例
–alluredir生成Allure指定语法
./report生成报告目录
–clear-alluredir清除report文件夹里的东西
feature 标注主要功能模块
story 标注feature功能模块下的分支功能
severity 标注测试用例的重要级别如下:
( blocker级别 致命缺陷
critical级别 严重缺陷
normal级别 一般缺陷,默认这个缺陷
minor级别 次要缺陷
trivial级别 轻微缺陷)
Step 标注测试用例的重要步骤
Attach 用于向测试报告中输入一些附件信息,通常是一些测试数据信息;
使用操作代码如下:
import pytest,allure @allure.feature('登录模块主要功能') class Test_login: @allure.story('模块中,输入用户信息功能') @allure.step('输入用户密码与账号') @allure.severity('blocker') def test_login1(self): print('用户名与用户密码') assert 0 @allure.step('点击操作') def test_login2(self): print('点击登录') assert 1 if __name__=='__main__': pytest.main(['-s','-q','--alluredir','./report'])
运行完后,会生成一个report的文件夹
接着切换该目录下终端输入生成报告命令:
就生成allure-report目录
运行即可
效果图如下:
还有哦
可视化
当然还有,你们可以自己去尝试一下哦
大致步骤:
获取登录接口
调用谷歌浏览器驱动
向登录接口发送请求
输入用户信息
点击登录
页面跳转
等待一下
关闭浏览器
有更好的代码宝子们可以分享,这是入门刚刚尝试,
代码如下:
import pytest,allure,time from selenium import webdriver from selenium.webdriver.common.by import By # @allure.feature('模块====登录与退出') # 准备数据,这里就有1条是正确的,2条是错误的账号 data=({"user":'======',"password":'cjm19991121' },{"user":'1273104934@qq.',"password":'cjm19991121' },{"user":'1273104933@qq.com',"password":'cjm19991121' }) @pytest.mark.parametrize('data',data) class TestUser: # @allure.step('1.调用浏览器驱动') # @allure.step('2.输入接口http') # @allure.step('3.输入用户名信息') # @allure.step('4.点击登录') # @allure.step('5.登录成功,截图') def setup_method(self): with allure.step('打开浏览器'): self.driver=webdriver.Chrome() with allure.step('输入登录网址'): self.driver.get('http://127.0.0.1:5000/user/login') def teardown_method(self): with allure.step('关闭浏览器'): time.sleep(5) self.driver.quit() def test_login(self,data): with allure.step('输入用户名与密码'): # print(data['user']) self.driver.find_element(By.NAME,'email').send_keys(data['user']) self.driver.find_element(By.NAME,'pwd').send_keys(data['password']) with allure.step('点击登录'): self.driver.find_element(By.XPATH,'/html/body/div/div[2]/form/button').click() time.sleep(5) assert self.driver.title=='首页' if __name__=='__main__': pytest.main(['-s','-q','--alluredir','./report']) # pytest.main(['-s'])
结果图
后续更新哈,欢迎指点,提供思路
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。