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. Mask R-CNN用于目标检测和分割代码实现

    Mask R-CNN用于目标检测和分割代码实现 Mask R-CNN for object detection and instance segmentation on Keras and Tenso ...

  2. https://www.jianshu.com/writer#/notebooks/164311/notes/88906048/preview

    什么是 webassembly 在 2019 年 12 月之前,如果你要编写一个web页面,那一定离不开 html.css.js 这三个好兄弟.在 2019 年 12 月之后 W3C 宣布 webas ...

  3. 剑指 Offer 04. 二维数组中的查找

    链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 标签:数组.双指针.二分 题目 在一个 n * m ...

  4. 01:osi七层---基于TCP协议的套接字(socket)

    1 : osi 七层,tcp/ip 五层 1 cs架构和bs架构2 互联网3 osi七层 tcp/ip五层 -物理层   -网线.光纤        -数据链路层       -网卡        - ...

  5. JUC并发包与容器类 - 面试题(一网打净,持续更新)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  6. [Docker核心之容器、数据库文件的导入导出、容器镜像的导入导出]

    [Docker核心之容器.数据库文件的导入导出] 使用 Docker 容器 在 Docker 中,真正对外提供服务的还是容器,容器是对外提供服务的实例,容器的本质是进程. 运行一个容器 docker ...

  7. Java知识复习(四)

    最近准备跳槽,又要好好复习基本知识了.过了个年,前面刚接触的springboot也只能先放放了.就先把自己复习了哪些罗列出来吧. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用== ...

  8. ES6 学习笔记之对象的拓展

    1.属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法.这样书写更加简洁. const foo = 'bar'; const baz = {foo}; baz //{foo: &q ...

  9. jquery循环动画

      <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&g ...

  10. 关于基于Nexus3和Docker搭建私有Nuget服务的探索

    背景简介 NuGet是Microsoft开发平台的程序集包管理器,它由客户端工具和服务端站点组成,客户端工具提供给用户管理和安装/卸载软件程序包,以及打包和发布程序包到NuGet服务端站点等功能,服务 ...