1、Unittest断言
1.1 什么是断言?
概念:让程序代替人为判断测试程序执行结果是否符合预期结果的过程
1.2 为什么要学习断言?
自动化脚本在执行的时候一般都是无人值守状态,我们不知道执行结果是否符合预期结果,所以我们需要让 程序代替人
为检测程序执行的结果是否符合预期结果,这就需要使用断言。
1.3 UnitTest断言方法
说明:
1. UnitTest中提供了非常丰富的断言方法,请参考附件资料
2. 复杂的断言方法在自动化测试中几乎使用不到,所以我们只需要掌握几个常用的即可
2、常用的Unittest断言方法
序号 断言方法 断言描述 1 assertTrue(expr, msg=None) 验证expr是true,如果为false,则fail 2 assertFalse(expr, msg=None) 验证expr是false,如果为true,则fail 3 assertEqual(expected, actual, msg=None) 验证expected==actual,不等则fail 【掌握】 4 assertNotEqual(first, second, msg=None) 验证first != second, 相等则fail 5 assertIsNone(obj, msg=None) 验证obj是None,不是则fail 6 assertIsNotNone(obj, msg=None) 验证obj不是None,是则fail 7 assertIn(member, container, msg=None) 验证是否member in container【掌握】 8 assertNotIn(member, container, msg=None) 验证是否member not in container
2.1 使用方法
断言方法已经在unittest. TestCase类中定义好了,而且我们自定义的测试类已经继承了
TestCase,所以在测试方法中直接调用即可。
import unittest
def add ( x, y) :
return x + y
class TestAssert ( unittest. TestCase) :
def test01 ( self) :
num = add( 1 , 2 )
self. assertEqual( 3 , num)
def test02 ( self) :
num = add( 1 , 2 )
is_ok = num == 3
self. assertTrue( is_ok)
3、案例1
"""
目标:断言练习
案例:
输入:正确用户名和密码 验证码为空
断言:提示信息是否为,验证码不能为空!
要求:如果断言出错,截屏保存。
"""
import unittest
import time
from time import sleep
from selenium import webdriver
class TestTphopLogin ( unittest. TestCase) :
def setUp ( self) :
self. driver = webdriver. Firefox( )
self. driver. get( "http://localhost" )
self. driver. maximize_window( )
self. driver. implicitly_wait( 30 )
def tearDown ( self) :
sleep( 2 )
self. driver. quit( )
def test_login_code_null ( self) :
driver = self. driver
driver. find_element_by_partial_link_text( "登录" ) . click( )
driver. find_element_by_css_selector( "#username" ) . send_keys( "13800001111" )
driver. find_element_by_css_selector( "#password" ) . send_keys( "123456" )
driver. find_element_by_css_selector( "#verify_code" ) . send_keys( "" )
driver. find_element_by_css_selector( ".J-login-submit" ) . click( )
result = driver. find_element_by_css_selector( ".layui-layer-content" ) . text
print ( "result:" , result)
expect_result = "验证码不能为空!!"
try :
self. assertEqual( result, expect_result)
except AssertionError:
driver. get_screenshot_as_file( "../image/{}.png" . format ( time. strftime( "%Y_%m_%d_%H_%M_%S" ) ) )
raise e
'''
需求:
1、登录百度
2、点击登录
3、输入正确用户名错误密码
4、断言提示信息
5、错误信息截图
'''
import time
import unittest
from time import sleep
from selenium import webdriver
class TestLogin ( unittest. TestCase) :
def setUp ( self) :
self. driver = webdriver. Firefox( )
self. driver. get( "https://www.baidu.com" )
self. driver. maximize_window( )
self. driver. implicitly_wait( 30 )
def tearDown ( self) :
sleep( 3 )
self. driver. quit( )
def test_error_login ( self) :
driver = self. driver
driver. find_element_by_css_selector( "#s-top-loginbtn" ) . click( )
sleep( 5 )
driver. find_element_by_css_selector( ".pass-text-input-userName" ) . send_keys( "18700898062" )
driver. find_element_by_css_selector( ".pass-text-input-password" ) . send_keys( "123456" )
driver. find_element_by_css_selector( "#TANGRAM__PSP_11__submit" ) . click( )
message = driver. find_element_by_css_selector( "#TANGRAM__PSP_11__error" ) . text
print ( "提示信息为:" , message)
message1 = "用户名或密码有误,请重新输入或!!"
try :
self. assertIn( message1, message)
print ( "提示信息正确" )
except AssertionError:
self. driver. get_screenshot_as_file( "./{}.png" . format ( time. strftime( "%Y_%m_%d_%H_%M_%S" ) ) )
raise
4、 断言扩展
"""
目标断言扩展:
两种实现方式:
1. 使用unittest框架中的断言
2. 使用python自带断言
"""