Selenium自动化初学-第五节:unittest

一、认识unittest
# 1、普通单元测试
# from studyPython.sample.unittestStudy.calculator import Calculator
# def test_add():
# c=Calculator(3,5)
# r=c.add()
# assert r ==8,'加法运算失败'
# def test_sub():
# c=Calculator(3,5)
# r=c.sub()
# assert r==1,'减法运算失败'
# if __name__=='__main__':
# test_add()
# test_sub()
# 2、unittest单元测试框架
# import unittest
#
# from studyPython.sample.unittestStudy.calculator import Calculator
#
#
# class test_calculator(unittest.TestCase): # 必须继承unittest.TestCase
#
# def test_add(self): # 必须test开头
# c = Calculator(3, 5)
# r = c.add()
# self.assertEqual(r, 8)
#
# def test_sub(self):
# c = Calculator(10, 5)
# r = c.sub()
# self.assertEqual(r, 5)
#
# def test_div(self):
# c = Calculator(10, 5)
# r = c.div()
# self.assertNotEqual(r, 2)
#
#
# if __name__ == '__main__':
# unittest.main()
# # 2>一些重要的概念
# import unittest
#
# from studyPython.sample.unittestStudy.calculator import Calculator
#
#
# class test_calculator(unittest.TestCase):
# # 测试用例的前置动作
# def setUp(self) -> None: # 返回值为None 就是没有定义需要返回的值,->int 就是返回值是int
# print("test start")
#
# def test_add(self):
# print("test_add")
# c = Calculator(4, 1)
# r = c.add()
# self.assertEqual(r, 5)
#
# def test_mul(self):
# print("test_mul")
# c = Calculator(4, 2)
# r = c.mul()
# self.assertNotEqual(r, 8)
#
# # 测试用例的后置动作
# def tearDown(self) -> None:
# print("test end")
#
#
# if __name__ == '__main__':
# # 创建测试套件
# suit = unittest.TestSuite()
# suit.addTest(test_calculator("test_mul"))
# suit.addTest(test_calculator("test_add"))
# # 创建测试运行器
# runner = unittest.TextTestRunner()
# runner.run(suit)
# # 3>断言方法
# import unittest
#
#
# class TestAssert(unittest.TestCase):
# def test_Assert(self):
# print("assertTrue:", self.assertTrue(True))
# print("assertFalse:", self.assertFalse(False))
# print("assertIs:", self.assertIs(1, 1))
# print("assertIsNot:", self.assertIsNot(1, 2))
# print("assertIsNone:", self.assertIsNone(None))
# print("assertIsNotNone:", self.assertIsNotNone("None"))
# print("assertIn:", self.assertIn("a", "abc")) #a在B里
# print("assertNotIn:", self.assertNotIn("a", "bc"))
# print("assertIsInstance:", self.assertIsInstance(1, int), '参数应该是一个int')#a是b的实例,即用来判断一个对象是否是指定类型的实例
# print("assertIsInstance:", self.assertIsInstance(1.2, (int, float)), '参数应该是一个int/float')
# print("assertNotIsInstance:", self.assertNotIsInstance("a", (int, float)), '参数应该是一个int/float')
#
#
# if __name__ == '__main__':
# unittest.main()
# 4>测试用例的组织与discover-见文件run_tests.py

run_tests.py:

#执行多个测试文件:TestLoader提供的discover()方法
import unittest

test_dir1='./test_case'#单级目录
test_dir2='./manyList'#多级目录
suits=unittest.defaultTestLoader.discover(test_dir2,pattern='test_*.py')

if __name__=='__main__':
runner=unittest.TextTestRunner()
runner.run(suits)

# 二、还需要知道的unittest-见文件other_unittest.py
# 1、测试用例的执行顺序
# 1》按照ASCII码的顺序执行-方法命名控制
# 2》测试套件添加测试用例顺序-优点:可以控制顺序,可以执行想要执行的测试用例 缺点:一次只能添加一条测试用例,所以需要指定测试类及测试方法
import unittest


# class TestOrderB(unittest.TestCase):
# def setUp(self) -> None:
# print("TestOrderB-start")
#
# def tearDown(self) -> None:
# print("TestOrderB-end")
#
# def test_b(self):
# print("TestOrderB-test_b")
#
# def test_a(self):
# print("TestOrderB-test_a")
#
#
# class TestOrderA(unittest.TestCase):
# def setUp(self) -> None:
# print("TestOrderA-start")
#
# def tearDown(self) -> None:
# print("TestOrderA-end")
#
# def test_b(self):
# print("TestOrderA-test_b")
#
# def test_a(self):
# print("TestOrderA-test_a")
#
#
# if __name__ == "__main__":
# # unittest.main()
# # suits = unittest.defaultTestLoader.discover('../test_case', pattern='other_*.py')
# # runner=unittest.TextTestRunner()
# # runner.run(suits)
# # 修改顺序不生效原因:在pycharm中,引入了unittest 模块,会默认按照 unittest 模式执行。需要将 unittest 模式转换成普通模式。
# suits = unittest.TestSuite()
# suits.addTest(TestOrderB("test_b"))
# suits.addTest(TestOrderA("test_b"))
# suits.addTest(TestOrderB("test_a"))
# suits.addTest(TestOrderA("test_a"))
# runner = unittest.TextTestRunner()
# runner.run(suits)
# 2、执行多级目录的测试用例-见文件夹manyList

每个文件下面加一个init文件,就可以多层级访问了
# 3、跳过测试和预期失败
# @unittest.skip("类也可以使用下面的方法")
# class TestDecorator(unittest.TestCase):
# @unittest.skip("不需要测试直接跳过")
# def test_skip(self):
# print("test_skip")
#
# @unittest.skipIf(2 > 1, "当前条件为真时跳过测试")
# def test_ifSkip(self):
# print("test_ifSkip")
#
# @unittest.skipUnless(True == True, "当条件为真时执行测试")
# def test_ifCarryOut(self):
# print("test_ifCarryOut")
#
# @unittest.expectedFailure # 不管执行结果是否失败,都将测试结果标记为失败,但是不会抛出失败信息
# def test_Failure(self):
# self.assertIn("q", "a")
# print("test_Failure")
#
#
# if __name__ == '__main__':
# unittest.main()
# 4、Fixture
def setUpModule():
print("setUpModule")


def tearDownModule():
print("tearDownModule")


class Test_start_end(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
print("setUpClass")

@classmethod
def tearDownClass(cls) -> None:
print("tearDownClass")

def setUp(self) -> None:
print("setUp")

def tearDown(self) -> None:
print("tearDown")

def test_1(self):
print("test_1")

def test_2(self):
print("test_2")


class Test_start_end2(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
print("setUpClass2")

@classmethod
def tearDownClass(cls) -> None:
print("tearDownClass2")

def setUp(self) -> None:
print("setUp2")

def tearDown(self) -> None:
print("tearDown2")

def test_1(self):
print("test_1_2")

def test_2(self):
print("test_2_2")


if __name__ == "__main__":
unittest.main()
"""
执行结果
setUpModule
setUpClass
setUp
test_1
tearDown
setUp
test_2
tearDown
tearDownClass
setUpClass2
setUp2
test_1_2
tearDown2
setUp2
test_2_2
tearDown2
tearDownClass2
tearDownModule
"""
# 三、web自动化--见文件夹test_web

import unittest
from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By


class test_baidu(unittest.TestCase):
driver = None

@classmethod
def setUpClass(cls) -> None:
options = webdriver.ChromeOptions()
options.add_experimental_option('detach', True) # 不自动关闭浏览器
cls.driver = webdriver.Chrome(options=options)
cls.base_url="https://www.baidu.com"

@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()

def sendKeys_tools(self, search_key):
self.driver.get(self.base_url)
self.driver.find_element(By.ID, "kw").send_keys(search_key)
self.driver.find_element(By.ID, 'su').click()
sleep(2)

def test_selenium(self):
search_key = "selenium"
self.sendKeys_tools(search_key)
title = self.driver.title
self.assertEqual(title, 'selenium_百度搜索')

def test_unittest(self):
search_key = "unittest"
self.sendKeys_tools(search_key)
title = self.driver.title
self.assertEqual(title, 'unittest_百度搜索')


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值