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开头的文件

Python + unittest知识点回顾的更多相关文章

  1. Python+pytest知识点回顾

    pip install pytest pytest 单元测试框架 pytest高于unittest测试框架 unittest测试类需要继承unittest.TestCase类 pytest不需要继承, ...

  2. Python + Requests 知识点回顾

    http://www.downza.cn/soft/11145.html PS下载地址 http://www.bejson.com/jsonviewernew/ JSON的在线视图 import re ...

  3. 零基础Python知识点回顾(一)

    如果你是小白,建议只要安装官网的python-3.7.0-amd64.exe 然后在电脑cmd命令提示符  输入检查是否已经安装pip,一般安装了python都会有的. >pip         ...

  4. django知识点回顾与补充

    一.django知识点回顾 1.Cookie操作 - 客户端本地存储的键值对 2.Session操作 - 3.URL路由 - /index -> view.函数 4.MTV 5.View中返回方 ...

  5. selenium+python+unittest实现自动化测试(入门篇)

    本文主要讲解关于selenium自动化测试框架的入门知识点,教大家如何搭建selenium自动化测试环境,如何用selenium+python+unittest实现web页面的自动化测试,先来看看se ...

  6. 最全Python基础知识点梳理

    本文主要介绍一些平时经常会用到的python基础知识点,用于加深印象,也算是对于学习这门语言的一个总结与回顾.python的详细语法介绍可以查看官方编程手册,也有一些在线网站可以学习 python语言 ...

  7. 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"

    在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...

  8. 面试前的准备---C#知识点回顾----03

    经过一天的奔波,喜忧参半,不细表 再回看下标题,C#知识点回顾 再看下内容,数据库3NF 原谅我这个标题党 今天继续回忆 1.HTTP中Post和Get区别 这忒简单了吧,大家是不是感觉到兴奋了,长舒 ...

  9. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

随机推荐

  1. 目标检测中特征融合技术(YOLO v4)(下)

    目标检测中特征融合技术(YOLO v4)(下) ASFF:自适应特征融合方式 ASFF来自论文:<Learning Spatial Fusion for Single-Shot Object D ...

  2. GPU编程和流式多处理器(二)

    GPU编程和流式多处理器(二) 2. 整数支持 SM具有32位整数运算的完整补充. 加法运算符的可选否定加法 乘法与乘法加法 整数除法 逻辑运算 条件码操作 to/from浮点转换 其它操作(例如,S ...

  3. CUDA统一内存分析

    CUDA统一内存分析 PascalMIG 如 NVIDIA Titan X 和 NVIDIA Tesla P100 是第一个包含页 GPUs 定额引擎的 GPUs ,它是统一内存页错误处理和 MIG ...

  4. 【NX二次开发】打开信息窗口UF_UI_open_listing_window

    头文件:uf_ui_ugopen.h函数名:UF_UI_open_listing_window 函数说明:打开信息窗口 测试代码: #include <uf.h> #include < ...

  5. 29.qt quick-在QML中调用C++类

    1.Qml调用C++类 Qt QML模块提供了一组API,用来将C++类扩展QML中.您可以编写扩展来添加自己的QML类型,扩展现有的Qt类型,或调用无法从普通QML代码访问的C/C++函数本章将学习 ...

  6. 第三节:Redis缓存雪崩、击穿、穿透、双写一致性、并发竞争、热点key重建优化、BigKey的优化 等解决方案

    一. 缓存雪崩 1. 含义 同一时刻,大量的缓存同时过期失效. 2. 产生原因和后果 (1). 原因:由于开发人员经验不足或失误,大量热点缓存设置了统一的过期时间. (2). 产生后果:恰逢秒杀高峰, ...

  7. 关于Maven repository中pom.xml的jar包依赖

    https://mvnrepository.com 该mvn网站可以找到个个版本的依赖jar包  http://doc.canglaoshi.org 该网站为达内的开发文档服务器,可以找到很多开发中需 ...

  8. NOIP模拟测试23「mine·water·gcd」

    mine 题解 一道比较水的dp 考试因为初始化挂掉了只有$80$分 代码有注释 #include<bits/stdc++.h> using namespace std; //无脑dp # ...

  9. Pytest学习笔记3-fixture

    前言 个人认为,fixture是pytest最精髓的地方,也是学习pytest必会的知识点. fixture用途 用于执行测试前后的初始化操作,比如打开浏览器.准备测试数据.清除之前的测试数据等等 用 ...

  10. 4.6 Python3 进阶 - 递归函数

    >>返回主目录 源码 # 定义及特性 # 简单递归思维练习,求和:1+2+3+-+100 # 思路:sum(100) = sum(99) + 100 # sum(99) = sum(98) ...