selenium 自动化测试工具(六)Unittest框架特定顺序介绍和断言讲解

# encoding = utf - 8
import unittest
import sys

#被测试类
class myclass(object):
	"""classmethod 修饰符对应的函数不需要实例化,
	不需要 self 参数,但第一个参数需要是表示自身
	类的 cls 参数,可以来调用类的属性,类的方法,
	实例化对象等。"""
	@classmethod
	def sum(cls,a,b):
		return a + b   #将两个传入参数进行相加操作
	@classmethod
	def sub(cls, a, b):
		return a - b   #将两个传入参数进行相减操作

class mytest(unittest.TestCase):
	# @classmethod
	# def setUpClass(cls):
	# 	"""初始化类固件"""
	# 	print("-----setUpClass")

	# @classmethod
	# def tearDownClass(cls):
	# 	"""重构类固件"""
	# 	print("--tearDownClas")

	#初始化工作
	def setUp(self):
		self.a = 3
		self.b = 1
		print("--setUp")

	#退出清理工作
	def tearDown(self):
		print("--tearDown")

	#具体的测试用例,一定要以test开头
	def test1sum(self):
		# res=3/0 抛出异常,执行结果为F
		#断言两数之和的结果是否是4
		res=myclass.sum(self.a,self.b)
		self.assertEqual(res,4,'test sum fail')
		print('testsum方法')

	def testsub(self):
		#断言两数之差的结果是否是2
		self.assertEqual(myclass.sub(self.a,self.b),2,'test sub fail')
		print('testsub方法')


class aa(unittest.TestCase):
	# num=2
	# @unittest.skip('skipping')
	# @unittest.skipIf(num>1,'num已经大于1')
	@unittest.skipUnless(sys.platform == "linux", "requires linux")
	def testaa(self):
		print('testaa')


if __name__ == '__main__':
	# 用例执行(一)执行当前模块中,各类中所有test开头的方法
	# unittest.main()	#启动单元测试

	'''
	# 用例执行(二) 使用测试集合可以同时执行统一.py文件中的多个测试用例类
	# 根据给定的测试类,获取其中的所有以‘test’开头的测试方法,并返回一个测试集合
	testCase1 = unittest.TestLoader().loadTestsFromTestCase(aa)
	testCase2 = unittest.TestLoader().loadTestsFromTestCase(mytest)
	# 将多个测试类加载到测试集合中
	suite = unittest.TestSuite([testCase1, testCase2])
	unittest.TextTestRunner().run(suite)
	'''


	# 用例执行(三)指定用例执行顺序
	# 1)获取TestSuite的实例对象
	suite = unittest.TestSuite()
	# 2)讲测试用例添加到测试容器中
	# suite.addTest(mytest("test1sum"))
	suite.addTest(aa('testaa'))
	# suite.addTest(mytest("testsub"))
	# 3)创建TextTestRunner类的实例对象
	runner = unittest.TextTestRunner(verbosity=2)
	runner.run(suite)
	import sys
	print(sys.platform)


	# 还可以这样写
	# suite = unittest.TestSuite()
	# cases = [mytest("testsub"), mytest("test1sum"), aa("testaa")]
	# suite.addTests(cases)#注意addTests后面有一个s
	# runner = unittest.TextTestRunner(verbosity=2)
	# runner.run(suite)

PK哥作业

# -*- coding:utf-8 -*-
import unittest
from selenium import webdriver
from time import sleep

'''
Author:pk哥
Date:2019/2/25
'''
driver = webdriver.Chrome()


class MyTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        driver.implicitly_wait(10)
        driver.get('http://106.13.46.164:8080/iwebshop/')     # 访问乐博商城
        driver.maximize_window()    # 窗口最大化
        driver.find_element_by_xpath('/html/body/div[1]/div[1]/p/a[1]').click()   # 点击登录按钮
        sleep(0.5)

    def setUp(self):
        driver.refresh()    # 每条案例执行前重新刷新页面

    def test_login1(self):
        # 账号为空,密码正确
        driver.find_element_by_name('login_info').send_keys('')
        sleep(0.5)
        driver.find_element_by_name('password').send_keys('pk123456')
        sleep(0.5)
        driver.find_element_by_class_name('submit_login').click()
        sleep(0.5)
        a = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/form/table/tbody/tr[1]/td/label')
        assert a.text == '填写用户名或邮箱', '提示文案不正确'
        sleep(0.5)
        driver.get_screenshot_as_file('login1.png')

    def test_login2(self):
        # 账号正确,密码为空
        driver.find_element_by_name('login_info').send_keys('brucepk')    # 输入账号
        sleep(0.5)
        driver.find_element_by_name('password').send_keys('')             # 输入密码
        sleep(0.5)
        driver.find_element_by_class_name('submit_login').click()         # 点击登录按钮
        sleep(0.5)
        a = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/form/table/tbody/tr[2]/td/label')
        assert a.text == '填写密码', '提示文案不正确'
        sleep(0.5)
        driver.get_screenshot_as_file('login2.png')

    def test_login3(self):
        # 账号错误,密码正确
        driver.find_element_by_name('login_info').send_keys('kkkkkkk')  # 输入账号
        sleep(0.5)
        driver.find_element_by_name('password').send_keys('pk123456')  # 输入密码
        sleep(0.5)
        driver.find_element_by_class_name('submit_login').click()  # 点击登录按钮
        sleep(0.5)
        a = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/form/table/tbody/tr[1]/td/div').text
        self.assertIn('用户名和密码不匹配', a, msg='提示文案校验失败')
        sleep(0.5)
        driver.get_screenshot_as_file('login3.png')

    def test_login4(self):
        # 账号正确,密码错误
        driver.find_element_by_name('login_info').send_keys('brucepk')  # 输入账号
        sleep(0.5)
        driver.find_element_by_name('password').send_keys('pkpkpkpk')  # 输入密码
        sleep(0.5)
        driver.find_element_by_class_name('submit_login').click()  # 点击登录按钮
        sleep(0.5)
        a = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/form/table/tbody/tr[1]/td/div').text
        self.assertIn('用户名和密码不匹配', a, msg='提示文案校验失败')
        sleep(0.5)
        driver.get_screenshot_as_file('login4.png')

    def test_login5(self):
        # 账号错误,密码错误
        driver.find_element_by_name('login_info').send_keys('pkkpkpkpkpkp')  # 输入账号
        sleep(0.5)
        driver.find_element_by_name('password').send_keys('pkpkpkpk')  # 输入密码
        sleep(0.5)
        driver.find_element_by_class_name('submit_login').click()  # 点击登录按钮
        sleep(0.5)
        a = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/form/table/tbody/tr[1]/td/div').text
        self.assertIn('用户名和密码不匹配', a, msg='提示文案校验失败')
        sleep(0.5)
        driver.get_screenshot_as_file('login5.png')

    def test_login6(self):
        # 账号正确,密码正确
        driver.find_element_by_name('login_info').send_keys('brucepk')    # 输入账号
        sleep(0.5)
        driver.find_element_by_name('password').send_keys('pk123456')     # 输入密码
        sleep(0.5)
        driver.find_element_by_class_name('submit_login').click()        # 点击登录按钮
        sleep(1)
        a = driver.find_element_by_class_name('loginfo').text
        self.assertIn('brucepk', a, msg='登录失败')            # 登录成功文案校验

    @classmethod
    def tearDownClass(cls):
        # 所有案例执行完毕后退出浏览器
        driver.quit()


if __name__ == '__main__':
    unittest.main()


三米作业

# date: 0226
# name: 三米

import unittest
from selenium import webdriver
from time import sleep

def login(driver,username,password):
    driver.find_element_by_link_text("登录").click()
    sleep(1)
    driver.find_element_by_name("login_info").send_keys(username)
    sleep(1)
    driver.find_element_by_name("password").send_keys(password)
    sleep(1)
    driver.find_element_by_class_name("submit_login").click()

class Test_Log(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        url="http://106.13.46.164:8080/iwebshop/"
        cls.driver=webdriver.Chrome()
        cls.driver.get(url)
        cls.driver.implicitly_wait(10)
        cls.driver.maximize_window()

    @classmethod
    def tearDownClass(cls):
        sleep(1)
        cls.driver.quit()

    def setUp(self):
        self.driver.refresh()
        sleep(1)

    def test_login01(self):
        login(driver=self.driver,username="sammie",password="000000")
        self.ele=self.driver.find_element_by_class_name("loginfo").text
        self.assertIn("您好,欢迎您来到", self.ele, "已注册的用户名和正确的密码,登陆异常")
        self.driver.find_element_by_link_text("安全退出").click()
        print("用例:已注册的用户名和正确的密码")

    def test_login02(self):
        login(driver=self.driver, username="sammie", password="111111")
        self.ele = self.driver.find_element_by_class_name("prompt").text
        self.assertEqual("用户名和密码不匹配", self.ele, "已注册的用户名和不正确的密码,登陆异常")
        self.driver.get_screenshot_as_file("./image/已注册的用户名和错误的密码.png")
        print("用例:已注册的用户名和错误的密码")

    def test_login03(self):
        login(driver=self.driver, username="sammie7", password="000000")
        self.ele = self.driver.find_element_by_class_name("prompt").text
        self.assertEqual("用户名和密码不匹配",self.ele,"未注册的用户名和任意密码,登录异常")
        self.driver.get_screenshot_as_file("./image/未注册的用户名和任意密码.png")
        print("用例:未注册的用户名和任意密码")

    def test_login04(self):
        login(driver=self.driver, username="", password="000000")
        self.ele=self.driver.find_element_by_class_name("invalid-msg").text
        self.assertEqual("填写用户名或邮箱",self.ele,"用户名为空,登录异常")
        self.driver.get_screenshot_as_file("./image/用户名为空.png")
        print("用例:用户名为空")

    def test_login05(self):
        login(driver=self.driver, username="sammie", password="")
        self.ele=self.driver.find_element_by_class_name("invalid-msg").text
        self.assertEqual("填写密码",self.ele,"密码为空,登录异常")
        self.driver.get_screenshot_as_file("./image/密码为空.png")
        print("用例:密码为空")


if __name__ == "__main__":
    # unittest.main(verbosity=2)
    suite = unittest.TestSuite()
    suite.addTest(Test_Log("test_login04"))
    suite.addTest(Test_Log("test_login05"))
    suite.addTest(Test_Log("test_login02"))
    suite.addTest(Test_Log("test_login03"))
    suite.addTest(Test_Log("test_login01"))
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)

运行模块

# encoding=utf-8
import unittest

if __name__=='__main__':
    # 批量执行测试模块(一)
    # 加载当前目录下所有有效的测试模块,'.'表示当前目录
    # 默认加载以test开头的py模块
    # testSuite=unittest.TestLoader().discover('.')
    # unittest.TextTestRunner(verbosity=2).run(testSuite)

    # 批量执行测试模块(一)
    # 指定路径及模块关键字 (举例: ../report:表示上一级目录中的report文件夹)
    # 代码路径下,加载以lebo开头的py文件(*.py表示指定目录下所有以.py为后缀的文件)
    testSuite = unittest.TestLoader().discover(start_dir='.',pattern='lebo*.py')
    unittest.TextTestRunner(verbosity=2).run(testSuite)

常用断言

import unittest
import random

#被测试类
class MyClass(object):
	@classmethod
	def sum(cls,a,b):
		return a + b   #将两个传入参数进行相加操作
	@classmethod
	def div(cls, a, b):
		return a / b   #将两个传入参数进行相除操作

	@classmethod
	def return_None(cls):
		return None

# 单元测试类
class MyTest(unittest.TestCase):
	# assertEqual 方法实例
	def test_assertEqual(self):
		# 断言两数之和的结果
		try:
			a,b=1,2
			sum=13
			self.assertEqual(a+b,sum,'断言失败,%s + %s !=%s' %(a,b,sum))
		except AssertionError as e:
			print(e)

	# assertNotEqual 方法实例
	def test_assertNotEqual(self):
		# 断言两数之差的结果
		try:
			a, b = 5,2
			res = 3
			self.assertNotEqual(a - b, res, '断言失败,%s - %s =%s' % (a, b, res))
		except AssertionError as e:
			print(e)

	# assertTrue 方法实例
	def test_assertTrue(self):
		# 断言表达式为真
		try:
			self.assertTrue(1==1, "表达式为假")
		except AssertionError as e:
			print(e)


	# assertFalse 方法实例
	def test_assertFalse(self):
		# 断言表达式为假
		try:
			self.assertFalse(3==2, "表达式为真")
		except AssertionError as e:
			print(e)

	# assertIs 方法实例
	def test_assertIs(self):
		# 断言两个变量类型属于同一个对象
		try:
			a = 12
			b = a
			self.assertIs(a , b,'%s 与 %s 不属于同一个对象' % (a, b))
		except AssertionError as e:
			print(e)

	# assertIsNot 方法实例
	def test_assertIsNot(self):
		# 断言两个变量类型不属于同一个对象
		try:
			a = 12
			b = 'test'
			self.assertIsNot(a , b,'%s 与 %s 属于同一个对象' % (a, b))
		except AssertionError as e:
			print(e)

	# assertIsNone 方法实例
	def test_assertIsNone(self):
		# 断言表达式结果为None
		try:
			result=MyClass.return_None()
			self.assertIsNone(result,'not is None')
		except AssertionError as e:
			print(e)

	# assertIsNotNone 方法实例
	def test_assertIsNotNone(self):
		# 断言表达式结果不为None
		try:
			result=MyClass.sum(2,5)
			self.assertIsNotNone(result,'is None')
		except AssertionError as e:
			print(e)

	# assertIn 方法实例
	def test_assertIn(self):
		# 断言对象A是否包含在对象B中
		try:
			strA="this is a test"
			strB="is"
			self.assertIn(strB,strA,'%s 不包含在 %s中' %(strB,strA))
		except AssertionError as e:
			print(e)

	# assertNotIn 方法实例
	def test_assertNotIn(self):
		# 断言对象A不包含在对象B中
		try:
			strA="this is a test"
			strB="Selenium"
			self.assertNotIn(strB,strA,'%s 包含在 %s中' %(strB,strA))
		except AssertionError as e:
			print(e)





if __name__=="__main__":
	# 执行单元测试
	# unittest.main()

	testCase = unittest.TestLoader().loadTestsFromTestCase(MyTest)
	# 将多个测试类加载到测试集合中
	suite = unittest.TestSuite([testCase])
	unittest.TextTestRunner(verbosity=1).run(suite)

执行测试并生成测试报告

# encoding = utf - 8
import unittest
import sys
import HTMLTestRunner
import time
import os

#被测试类
class myclass(object):
	"""classmethod 修饰符对应的函数不需要实例化,
	不需要 self 参数,但第一个参数需要是表示自身
	类的 cls 参数,可以来调用类的属性,类的方法,
	实例化对象等。"""
	@classmethod
	def sum(cls,a,b):
		return a + b   #将两个传入参数进行相加操作
	@classmethod
	def sub(cls, a, b):
		return a - b   #将两个传入参数进行相减操作

class mytest(unittest.TestCase):
	# @classmethod
	# def setUpClass(cls):
	# 	"""初始化类固件"""
	# 	print("-----setUpClass")

	# @classmethod
	# def tearDownClass(cls):
	# 	"""重构类固件"""
	# 	print("--tearDownClas")

	#初始化工作
	def setUp(self):
		self.a = 3
		self.b = 1
		print("--setUp")

	#退出清理工作
	def tearDown(self):
		print("--tearDown")

	#具体的测试用例,一定要以test开头
	def test1sum(self):
		# res=3/0 抛出异常,执行结果为F
		#断言两数之和的结果是否是4
		res=myclass.sum(self.a,self.b)
		self.assertEqual(res,4,'test sum fail')
		print('testsum方法')

	def testsub(self):
		#断言两数之差的结果是否是2
		self.assertEqual(myclass.sub(self.a,self.b),2,'test sub fail')
		print('testsub方法')


class aa(unittest.TestCase):
	# num=2
	# @unittest.skip('skipping')
	# @unittest.skipIf(num>1,'num已经大于1')
	@unittest.skipUnless(sys.platform == "linux", "requires linux")
	def testaa(self):
		print('testaa')


if __name__ == '__main__':

	testCase = unittest.TestLoader().loadTestsFromTestCase(mytest)
	# 将多个测试类加载到测试集合中
	suite = unittest.TestSuite([testCase])

	cur_time=time.strftime('%Y-%m-%d_%H_%M_%S')
	filename=os.path.dirname(os.path.abspath('.'))+'\\report\\'+cur_time+'.html'
	f=open(filename,"wb")
	runner=HTMLTestRunner.HTMLTestRunner(stream=f,title="测试报告",description='测试报告描述')
	runner.run(suite)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值