postman
安装Newman 先安装node.js,把npm添加到环境变量中。
npm install newman --registry=https://registry.npm.taobao.org
newman run 拉钩网.postman_collection.json newman-reporter-html
login登录成功后是不是代表业务流程是对的?
不是,只是代表login的接口是对的。
接口测试的维度:
1.请求参数的边界值
2.请求参数为空
3.请求参数数据类型
4.请求&响应时间的验证
5.基本的业务流程,业务流程ok,前后端业务场景测试ok
不需要单独的验证数据库的数据是否正确
因为客户端向服务端发起请求获取数据,服务端链接到数据库,写SQL语句,然后返回需要的内容给客户端
500万请求数据,怎么断言数据,服务器会链接SQL语句,把消费的金额进行累计进行断言。
公司的要求:
1.发展业务价值
2.更短的上线时间
3.更好的软件质量
4.更少的资源投入
5.关注用户的行为
6.倡导零缺陷,做有价值的事
单元测试unittest
测试用例 -->testcases
测试固件 -->准备工作和收尾工作
测试套件 testsuite-->测试用例集合
测试执行 testrunner-->测试用例test执行
测试断言 -->期望结果是断言,实际结果
测试报告 testreport-->测试用例生成报告
测试策略
本轮测试版本,测试场景,回归问题,新增需求等进行测试
小牛试刀
class Test():
def __init__(self,a,b):
self.a = a
self.b = b
def add(self):
return self.a + self.b
test = Test(5,6)
print(test.add())
测试固件
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
print(‘前置准备ok‘)
# def setUp(self):
# print(‘前置准备ok‘)
def test1(self):
print(‘TestCase1‘)
def test02(self):
print(‘TestCase2‘)
@classmethod
def tearDownClass(cls):
print(‘收尾工作ok‘)
# def tearDown(self):
# print(‘收尾工作ok‘)
if __name__ == ‘__main__‘:
unittest.main(verbosity=2)
测试固件 setUpClass & teardownclass 只执行一次前置和收尾工作
import unittest
from selenium import webdriver
class Baidu(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.driver.get(‘https://www.baidu.com‘)
cls.driver.implicitly_wait(10)
cls.driver.maximize_window()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
def test_baidu_news(self):
"""百度链接测试:验证hao123链接测试"""
self.driver.find_element_by_link_text(‘hao123‘).click()
self.assertEqual(self.driver.current_url,‘https://www.hao123.com/‘)
def test_baidu_map(self):
"""百度链接测试:验证地图链接测试"""
self.driver.find_element_by_link_text(‘地图‘).click()
self.assertEqual(self.driver.title,‘百度地图‘)
self.driver.back()
if __name__ == ‘__main__‘:
unittest.main(verbosity=2)
测试套件 -->测试用例的集合
addtest -->让用例有顺序的执行
测试用例执行顺序 addtest 添加&删除用户举例
按测试类来执行 makeSuite()
加载测试类 testloader
按照测试模块来执行
import unittest
from selenium import webdriver
class Baidu(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.driver.get(‘https://www.baidu.com‘)
cls.driver.implicitly_wait(10)
cls.driver.maximize_window()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
def test_baidu_news(self):
"""百度链接测试:验证hao123链接测试"""
self.driver.find_element_by_link_text(‘hao123‘).click()
self.assertEqual(self.driver.current_url,‘https://www.hao123.com/‘)
self.driver.back()
def test_baidu_map(self):
"""百度链接测试:验证地图链接测试"""
self.driver.find_element_by_link_text(‘地图‘).click()
self.assertEqual(self.driver.title,‘百度地图‘)
self.driver.back()
def test_baidu_text(self):
"""百度输入框测试:验证输入框文本测试"""
self.driver.find_element_by_id(‘kw‘).send_keys(‘selenium‘)
self.driver.find_element_by_id(‘su‘).click()
self.assertEqual(self.driver.title,‘百度搜索_selenium‘)
self.driver.back()
if __name__ == ‘__main__‘:
suite = unittest.TestSuite()
suite.addTest(Baidu(‘test_baidu_news‘))
suite.addTest(Baidu(‘test_baidu_map‘))
suite.addTest(Baidu(‘test_baidu_text‘))
unittest.TextTestRunner(verbosity=2).run(suite)
按照测试类来执行测试用例
import unittest
from time import sleep
from selenium import webdriver
import HTMLTestRunner
import time,os
def add(a,b):
return a-b
class BaiduTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.driver.get(‘https://www.baidu.com‘)
cls.driver.implicitly_wait(10)
cls.driver.maximize_window()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
@unittest.skip(‘该功能已经取消,忽略该测试用例的执行‘)
def test_baidu_news(self):
"""百度链接测试:验证hao123链接测试"""
self.driver.find_element_by_link_text(‘hao123‘).click()
self.assertEqual(self.driver.current_url,‘https://www.hao123.com/‘)
self.driver.back()
sleep(3)
@unittest.skipIf(‘5<3‘,‘测试用例执行‘)
def test_baidu_map(self):
"""百度链接测试:验证地图链接测试"""
self.driver.find_element_by_link_text(‘地图‘).click()
self.assertEqual(self.driver.title,‘百度地图‘)
self.driver.back()
#期望它失败
@unittest.expectedFailure
def test_001(self):
self.assertEqual(add(5,4),2)
def test_baidu_text(self):
"""百度输入框测试:验证输入框文本测试"""
sleep(3)
self.driver.find_element_by_id(‘kw‘).send_keys(‘selenium‘)
self.driver.find_element_by_id(‘su‘).click()
self.assertIn(‘selenium‘,‘百度搜索_selenium‘,msg=‘测试ok‘)
self.driver.back()
def test_baidu_edit(self):
‘‘‘百度输入框测试:验证百度输入框是否可编辑‘‘‘
sleep(3)
so = self.driver.find_element_by_id(‘kw‘)
self.assertTrue(so.is_enabled())
@staticmethod
def suite():
suite = unittest.TestSuite(unittest.makeSuite(BaiduTest))
# suite = unittest.TestLoader().loadTestsFromTestCase(BaiduTest) #从class类中加载
# suite = unittest.TestLoader().loadTestsFromModule(‘Requests_test.py‘) #从模块中加载
return suite
def getNowtime(self):
return time.strftime(‘%Y_%m_%d_%H_%M_%s‘)
def Main(self):
suite = unittest.defaultTestLoader.discover(
start_dir=os.path.dirname(__file__),
pattern=None,
top_level_dir=None)
# suite = unittest.TestLoader().discover(
# start_dir = None,
# pattern = None,
# top_level_dir = None
# )
return suite
def Run(self):
fp = os.path.join(os.path.dirname(__file__),‘report‘,getNowtime +‘test_repoet.html‘)
runner = HTMLTestRunner.HTMLTestRunner(
stream=open(fp,‘wb‘),
title=‘接口自动化测试‘,
description=‘windows7系统,chrome浏览器‘).run(Main())
if __name__ == ‘__main__‘:
# suite = unittest.TestSuite(unittest.makeSuite(BaiduTest))
# suite.addTest(BaiduTest)
# unittest.TextTestRunner(verbosity=2).run(BaiduTest.suite())
# unittest.main(verbosity=2)
Run()
测试代码覆盖率的统计
pip install coverage
coverage run test*.py
执行test开头的文件
原文地址:https://www.cnblogs.com/Teachertao/p/12304029.html