心之所有
想学习的可以互相沟通,互相学习,刚开始学。有什么问题可以沟通

导航

 

unit test:只能使用使用面向对象式的编程方式

pytest:可以使用多种变成方式(函数式,面向对象式)等

一、pytest

1、执行模块级别的:python -m pytest -v tests/

2、moduld级别python -m pytest -v tests/test_add.py

3、执行具体的测试函数:python -m pytest -v tests/test_add.py::test_add_001

4、执行测试类:python -m pytest -v tests/test_add.py::TestLogin

5、执行测试类里面具体的测试方法:python -m pytest -v tests/test_add.py::TestLogin::test_login_001

6、按分类执行测试:

-k的是允许你使用表达式来指定希望执行的测试用例,比如某个测试名称是唯一的,以及多个测试名的最前面的名称或者后面名称一直,那么可以使用表达式来快速执行,

1、包含login的所有用例:python -m pytest -v -k "login" tests/test_fenlei.py

2、python3 -m pytest -v -k "login or logout" tests/test_wuya.py
或者关系

2、python -m pytest -v -k "login and loginout" tests/test_fenlei.py
and的关系

7、失败立刻停止 -x:python -m pytest -v -x tests/test_add.py

8、指定失败次数:--maxfail

也可以指定失败的次数,比如最大能够忍耐的失败次数,比如2,或者0

命令为:pytest -v -x --maxfail=2 tests/test_add.py

9、输出信息展示

--tb=no:关闭信息:pytest -v --tb=no tests/test_add.py
--tb=short:只输出assert的错误信息:pytest -v --tb=short tests/test_add.py
--tb=line:一行展示所有的信息,:pytest -v --tb=line tests/test_add.py

命令为:pytest -v -x -m login --tb=no,

10、忽略执行: -rs,在编写的测试点中,有的测试用例我们是忽略执行的:pytest -v -rs tests/test_add.py

11、定位错误,在执⾏的时候出错,我们希望能够快速定位出具体是哪⼀⾏出错了,就会使⽤到--lfpytest -v --lf tests/test_add.py

12、遇到错误继续执⾏:--ff:pytest -v --ff tests/test_add.py

-x是遇到错误⽴刻停⽌,我们还是希望遇到错误后,继续执⾏,不要因为⼀个错误⽽导致不执⾏
13、测试执行速度:--durations=N

使用该选项,可以加速测试用例的执行,当然有一点需要记住的是它不关心测试内部是怎么实现的,只统计测试过程中那个阶段执行速度是最慢的,如果参数是--duration=0,它就会按所有阶段耗时从长到短进行排序,(按照运行加载速度)

代码为:pytest -v --duration=0 tests/test_add.py

 

四、整合pytest和webdriver

安装库:pip3 install pytest-selenium

新建一个test模块

1、百度实战

import pytest
from selenium import webdriver
import time as t

def test_baidu_title(selenium):
	selenium.maximize_window()
	selenium.get('https://www.baidu.com/')
	selenium.implicitly_wait(30)
	assert selenium.title=="百度一下,你就知道"

def test_baidu_so(selenium):
	selenium.maximize_window()
	selenium.get('https://www.baidu.com/')
	selenium.implicitly_wait(30)
	so=selenium.find_element_by_id('kw')
	so.send_keys("仇杀")
	t.sleep(3)
	assert so.get_attribute('value')=='仇杀'

  找到工程的目录,在命令提示符输入:python -m pytest -v  --driver Chrome tests/test_ui.py

执行结果为:

 

 

 

2、qq整合实战:

import  time as t
import pytest


def test_file_11_003(selenium):
	"""验证登陆的方式"""
	selenium.maximize_window()
	selenium.get('https://file.qq.com/')
	selenium.implicitly_wait(30)
	selenium.switch_to.frame('login_frame1')
	t.sleep(2)
	selenium.switch_to.frame('ptlogin_iframe')
	t.sleep(2)
	selenium.find_element_by_link_text('帐号密码登录').click()
	t.sleep(2)
	username=selenium.find_element_by_xpath('//*[@id="uin_tips"]')
	assert username.text=='支持QQ号/邮箱/手机号登录'

def test_file_qq_002(selenium):
	'''登录验证:校验点击注册跳转到注册的页面'''
	selenium.maximize_window()
	selenium.get('https://file.qq.com/')
	selenium.implicitly_wait(30)
	selenium.switch_to.frame('login_frame1')
	t.sleep(2)
	selenium.switch_to.frame('ptlogin_iframe')
	t.sleep(2)
	nowHandler=selenium.current_window_handle
	selenium.find_element_by_link_text('注册新帐号').click()
	allHandlers=selenium.window_handles
	for handler in allHandlers:
		if nowHandler!= handler:
			selenium.switch_to.window(handler)
			t.sleep(2)
			assert selenium.title=='QQ注册'
			selenium.close()

  找到工程的目录,在命令提示符输入:

结果为:

-s:输出(加载输出结果)

 3、单独执行某一行

import pytest

class TestLogin(object):
	def test_login_001(self):
		pass

	def test_login_002(self):
		assert 3==3

if __name__ == '__main__':
    pytest.main(["-v","-s","test_add.py::TestLogin::test_login_002"])

  执行结果为:

 

 4、参数化(@pytest.mark.parametrize)

import pytest

def add(a,b):
	return a+b

@pytest.mark.parametrize('x,y,result',[
	(1,2,3),
	(2,3,5),
	('Hi,','无涯','Hi,无涯'),
	(1.0,1.0,2.0),
	(1,1.0,2.0),
	(0,0,0)
])

def test_add_many(x,y,result):
	assert add(a=x,b=y)==result

if __name__ == '__main__':
    pytest.main(["-v","-s","test_params.py"])

  

 

  执行结果为:

 

 

2、参数化:

import pytest
def add(a, b):
	return a + b

@pytest.mark.parametrize('data',[
	(1, 2, 3),
	(2, 3, 5),
	('Hi,', 'lh', 'Hi,lh'),
	(1.0, 1.0, 2.0),
	(1, 1.0, 2.0),
	(0, 0, 0)
])
def test_add_many(data):
	assert add(a=data[0], b=data[1]) == data[2]

if __name__ == '__main__':
	pytest.main(["-v", "-s", "test_params.py"])

  执行以上代码,结果为:

3、参数化实战:

import pytest
import time as t

@pytest.mark.parametrize('username,password,divText', [
	('wuya1303@sina.com','','请输入密码'),
	('wuya1303@sina.com','awerst','你输入的帐号或密码不正确,请重新输入。'),
	('wuta', 'sad', '您输入的邮箱名格式不正确')
])
def test_sina_login(selenium, username, password, divText):
	selenium.maximize_window()
	selenium.get('https://mail.sina.com.cn/')
	selenium.implicitly_wait(30)
	selenium.find_element_by_id('freename').send_keys(username)
	selenium.find_element_by_id('freepassword').send_keys(password)
	selenium.find_element_by_link_text('登录').click()
	t.sleep(3)
	errorText = selenium.find_element_by_xpath(
		'/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
	assert errorText.text == divText

  找到该工程的路径,输入文件的路径

 结果为:

 

 

 

 

 

posted on 2021-08-24 18:00  橙橙的橙  阅读(94)  评论(0编辑  收藏  举报