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. CodeGen融合核心扩展定制文件

    CodeGen融合核心扩展定制文件 融合核心定制文件 Harmony核心环境的各个方面都可以通过创建一个定制文件来定制,该文件是一个名为Harm的JSON文件onyCoreCustomization. ...

  2. Thumb扩展

    Thumb扩展 ARM处理器已在嵌入式系统,手持计算机和其系统中得到了最大的应用,在这些系统中,系统对使用有限资源进行大量工作的要求很高.Thumb扩展是为解决资源消耗中的某些方面而创建的,已成为当今 ...

  3. node和gulp版本的坑

    现在node版本最新的稳定版在14+ 然后我在接手项目的时候使用gulp打包,怎么也打包不了,这个问题纠结了挺久,然后百度了下,发现版本的问题 node 12+ 以上的版本不兼容 gulp 3的版本 ...

  4. python+selenium基础篇,句柄操作(多个页面切换)

    1.我们打开网页有时候会开出多个页面,导致我们常常定位不到我们需要的元素,这种情况可能就是句柄的因素,如下图所示: 2.句柄切换代码如下: from selenium import webdriver ...

  5. 重新整理 .net core 实践篇—————静态中间件[二十一]

    前言 简单整理一下静态中间件. 正文 我们使用静态文件调用: app.UseStaticFiles(); 那么这个默认会将我们根目录下的wwwroot作为静态目录. 这个就比较值得注意的,可能刚开始学 ...

  6. RobotFramework + Python 自动化入门 二 (关键字)

    在<RobotFramwork + Python 自动化入门 一>中,完成了Robot环境搭建及测试脚本的创建和执行. 本节,对RobotFramework的关键字使用和查看源码进行介绍. ...

  7. ceph-csi源码分析(8)-cephfs driver分析

    更多 ceph-csi 其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi源码分析(8)-cephfs driver分析 当ceph-csi组件启动 ...

  8. 为什么要使用MongoDB?

    1.Mongo与Mysql简单对比 关系型数据库-MySQL 1.在不同的引擎上有不同的存储方式. 2.查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高. 3.开源数据库的份额在不断增加 ...

  9. 955.WLB 不加班公司名单!再新增 5 家公司!

    大家好!我是<Visual Studio Code 权威指南>的作者韩骏.相信不少童鞋都是因为 VS Code 认识到我:也许是用了我写的 20 多个 VS Code 插件(比如 Code ...

  10. Swagger/OpenAPI By Swashbuckle在NetCore 3.1中较NetCore 2.2使用的注意事项及入门

    方案选择 使用Web API时,了解其各种方法对开发人员来说可能是一项挑战. Swagger也称为OpenAPI(Open Application Programming Interface,开放应用 ...