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. LCD: 2D-3D匹配算法

    LCD: 2D-3D匹配算法 标题:LCD:Learned Cross-Domain Descriptors for 2D-3D Matching 作者:Quang-Hieu Pham, Mikael ...

  2. 代码生成codegen

    代码生成codegen 该模块提供了从SymPy表达式生成直接可编译代码的功能.该codegen功能是SymPy中代码生成功能的用户界面.下面为可能希望直接使用框架的高级用户提供了一些实现细节. 注意 ...

  3. Django(59)验证和授权

    验证和授权概述   Django有一个内置的授权系统.他用来处理用户.分组.权限以及基于cookie的会话系统.Django的授权系统包括验证和授权两个部分.验证是验证这个用户是否是他声称的人(比如用 ...

  4. 6, java数据结构和算法: 栈的应用, 逆波兰计算器, 中缀表达式--> 后缀表达式

    直接上代码: public class PolandCalculator { //栈的应用:波兰计算器: 即: 输入一个字符串,来计算结果, 比如 1+((2+3)×4)-5 结果为16 public ...

  5. NX二次开发-获取WCS标识

    函数:UF_CSYS_ask_wcs() 函数说明:获取工作坐标系对象的标识. 用法: 1 #include <uf.h> 2 #include <uf_csys.h> 3 e ...

  6. 《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程)

    1.简介 jmeter系列的文章结束,本来想趁热打铁顺别将Jmeter和接口测试介绍一下,但是感觉Jmeter时间太长了怕大家吃腻了,还有一个原因就是许多小伙伴们或者童鞋们私信问宏哥什么时候可以有ja ...

  7. noip2006 总结

    T1 能量项链 原题 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子 ...

  8. 浅谈.Net Core中使用Autofac替换自带的DI容器

    为什么叫 浅谈 呢?就是字面上的意思,讲得比较浅,又不是不能用(这样是不对的)!!! Aufofac大家都不陌生了,说是.Net生态下最优秀的IOC框架那是一点都过分.用的人多了,使用教程也十分丰富, ...

  9. vue 快速入门 系列 —— vue loader 上

    其他章节请看: vue 快速入门 系列 vue loader 上 通过前面"webpack 系列"的学习,我们知道如何用 webpack 实现一个不成熟的脚手架,比如提供开发环境和 ...

  10. 30、LNAP(php和nginx相关优化)

    30.1.php-fpm.conf参数优化: [global] pid = run/php-fpm.pid #php后台运行pid路径 error_log = log/php-fpm.log #php ...