UI自动化——单元测试框架(1)

一、自动化测试概述

1、自动化测试维度

1)表单的错误提示信息的验证(如弹出框文本信息的验证,邮箱等输入的格式不规范。)

2)产品业务逻辑的验证;

3)页面的各种交互。

2、自动化测试步骤

1)先梳理哪些模块可以做自动化测试。

2)梳理完成后,和相关的人建议对下计划以及梳理的结果。

3)编写代码实现梳理的测试模块。

4)编写完成后,和相关的人进行评审代码(测试场景是否考虑周全,测试断言是否合理,代码编写的是否合理)。

5)编写完成后,整合到Jekins的持续集成平台。

6)下个迭代的时候,直接可以应用于产品的回归测试中。

3、自动化测试用例组成

1)初始化:setUp

2)测试步骤:test_字符

3)断言:assert

4)清理:tearDown

二、断言的方式

1、python原生的assert断言

import unittest
from selenium import webdriver

#初始化
#关键字:setUp
class BaiduTest(unittest.TestCase):
	def setUp(self) -> None:
		self.driver=webdriver.Chrome()
		self.driver.maximize_window()
		self.driver.get('http://www.baidu.com')
		self.driver.implicitly_wait(30)

#清除
#关键字:tearDown
	def tearDown(self) -> None:
		self.driver.quit()

#测试方法(断言)
#在测试类里面编写的测试方法必须是test开头的
	def test_baidu_title(self):
		assert self.driver.title=='百度一下,你就知道'

#执行
if __name__=='__main__':
	unittest.main

2、selenium原生的断言

1)saaertEqual:比较两个对象是否相等

import unittest
from selenium import webdriver
import time as t

class SinaTest(unittest.TestCase):
	def setUp(self) -> None:
		# self.driver=webdriver.Chrome()
		self.driver.maximize_window()
		self.driver.get('https://mail.sina.com.cn/')
		self.driver.implicitly_wait(30)

	def tearDown(self) -> None:
		self.driver.quit()

	def test_login_null(self):
		self.driver.find_element_by_id('freename').send_keys('')
		self.driver.find_element_by_id('freepassword').send_keys('')
		self.driver.find_element_by_class_name('loginBtn').click()
		t.sleep(3)
		divTest=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
		#assertEqual:比较两个对象是否相等:==
		self.assertEqual(divTest.text,'您输入的邮箱名格式不正确')

	def test_login_email_format(self):
		self.driver.find_element_by_id('freename').send_keys('werwf')
		self.driver.find_element_by_id('freepassword').send_keys('AFsfeasf')
		self.driver.find_element_by_class_name('loginBtn').click()
		t.sleep(3)
		divTest=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
		#assertEqual:比较两个对象是否相等:==
        self.assertEqual(divTest.text,'您输入的邮箱名格式不正确')

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

2)assertIN:比较一个对象是否包含另一个对象

import unittest
from selenium import webdriver
import time as t

class SinaTest(unittest.TestCase):
	def setUp(self) -> None:
		self.driver=webdriver.Chrome()
		self.driver.maximize_window()
		self.driver.get('https://mail.sina.com.cn/')
		self.driver.implicitly_wait(30)

	def tearDown(self) -> None:
		self.driver.quit()

	def test_login_null(self):
		self.driver.find_element_by_id('freename').send_keys('')
		self.driver.find_element_by_id('freepassword').send_keys('')
		self.driver.find_element_by_class_name('loginBtn').click()
		t.sleep(3)
		divTest=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
		self.assertEqual(divTest.text,'请输入邮箱名')

	def test_login_email_format(self):
		self.driver.find_element_by_id('freename').send_keys('werwf')
		self.driver.find_element_by_id('freepassword').send_keys('AFsfeasf')
		self.driver.find_element_by_class_name('loginBtn').click()
		t.sleep(3)
		divTest=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
		#assertIn:比较一个对象是否包含另一个对象
		self.assertIn(divTest.text,'您输入的邮箱名格式不正确')

	def test_login_isButton(self):
		divText=self.driver.find_element_by_id('store1')
		t.sleep(3)
		#针对bool的类型验证assertTrue
		self.assertTrue(divText.is_selected())
		divText.click()
		t.sleep(3)
		#针对bool的类型验证assertFalse
		self.assertFalse(divText.is_selected())

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

 3)assertTrue与assertFalse

assertTrue:针对bool类型验证true or false;真真为真,真假为假,即断言内容返回真,则为真,断言内容返回假则为假

assertFalse:针对bool类型验证true or false;假假为真,假真为假,即断言内容返回假,则为真,断言内容返回真则为假

import unittest
from selenium import webdriver
import time as t

class SinaTest(unittest.TestCase):
	@classmethod
	def setUp(self) -> None:
		self.driver=webdriver.Chrome()
		self.driver.maximize_window()
		self.driver.get('https://mail.sina.com.cn/')
		self.driver.implicitly_wait(30)

	@classmethod
	def tearDown(self) -> None:
		self.driver.quit()

	def test_login_null(self):
		self.driver.find_element_by_id('freename').send_keys('')
		self.driver.find_element_by_id('freepassword').send_keys('')
		self.driver.find_element_by_class_name('loginBtn').click()
		t.sleep(3)
		divTest=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
		self.assertEqual(divTest.text,'请输入邮箱名')

	def test_login_email_format(self):
		self.driver.find_element_by_id('freename').send_keys('werwf')
		self.driver.find_element_by_id('freepassword').send_keys('AFsfeasf')
		self.driver.find_element_by_class_name('loginBtn').click()
		t.sleep(3)
		divTest=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
		#assertEqual:比较两个对象是否相等:==
		self.assertEqual(divTest.text,'您输入的邮箱名格式不正确')
		#assertIn:比较一个对象是否包含另一个对象
		self.assertIn(divTest.text,'您输入的邮箱名格式不正确')

	def test_login_isButton(self):
		divText=self.driver.find_element_by_id('store1')
		t.sleep(3)
		#针对bool的类型验证assertTrue
		self.assertTrue(divText.is_selected())
		divText.click()
		t.sleep(3)
		#针对bool的类型验证assertFalse
		self.assertFalse(divText.is_selected())

if __name__=='__main__':
	# #按测试类来执行
	# suite=unittest.TestLoader().loadTestsFromTestCase(testCaseClass='SinaTest')
	#按测试模块来执行
	suite=unittest.TestLoader().loadTestsFromModule(module='test_sina.py')
	unittest.TextTestRunner().run(suite)

 三、单元测试

在python中,单元测试的框架主要就是unittest。

unittest属于标准库,只要安装了python解释器后就可以直接导入使用了。

导入的方式为:import unittest。

自动化测试的方法是由unittest库下的TestCase类提供的,所以我们写自动化测试用例前必须继承unittest库中的TestCase类

四、unittest测试框架

注意事项:

1、在测试类里面编写的测试方法必须是test开头的,也就是测试的步骤和断言部分的方法名,必须以test开头,推荐使用test_,并且一言以蔽之,如测试百度的标题名的测试用例,其方法名为:test_baidu_title(self)。

2、在测试类中,若使用的是常规的测试固件,那么有多少个测试用例,其里面的初始化和清理就执行多少次。

3、如果在测试类中,有很多个测试用例,而我们仅仅想执行某一个测试用例,那么就将鼠标放在该测试用例的名称处,然后运行即可。

4.1

posted @ 2022-04-12 10:43  无耿  阅读(93)  评论(0编辑  收藏  举报