Python入门-程序测试
1.功能测试
常规测试
- #常规测试代码,一个模块写功能,一个模块调用功能
- #=============模块1:gongneng_ceshi
- def func(v1, v2):
- return v1* v2
- #=============模块2
- from gongneng_ceshi import func #导入模块1
- def main():
- if func(5,6) *3 ==30:
- print("乘法计算ok")
- else:
- print("数学乘法计算失败!")
- def main2():
- if func("hello",3) == "hellohellohello":
- print("字符串乘法计算ok")
- else:
- print("字符串乘法计算失败!")
- if __name__ == '__main__':
- main()
- main2()
- """
- 数学乘法计算失败!
- 字符串乘法计算ok
- """
- 常规的功能测试代码,结构简单,测试单一,测试比较分散
doctest模块,测试单个功能
- import doctest
- #在程序中,对执行部分进行描述,结果部分直接编写
- # 坑逼模块,>>> 后面必须留一个空格,不然会报错!!!
- def fun(v1, v2):
- """
- >>> fun(5,6)
- 30
- >>> fun("he",2)
- 'hehe'
- """
- return v1 * v2
- if __name__ == '__main__':
- doctest.testmod(verbose=True)
- #True表示,执行时候输出详细信息,默认为False
- """
- 返回执行时间
- Testing started at 10:32 ...
- """
unittest模块,测试单个文件
- #功能模块1==============================
- class Math:
- def add(self, numa, numb):
- return numa + numb
- def sub(self, numa, numb):
- return numa - numb
- if __name__ == '__main__':
- m = Math()
- #测试模块2==============================
- from unitest_demo import Math
- import unittest
- class Testmath(unittest.TestCase): #继承testcase父类
- @classmethod
- def setUpClass(self):
- print("【=======全部测试开始=====】")
- @classmethod
- def tearDownclass(self):
- print("【=======全部测试结束=====】")
- def tearDown(self) -> None:
- print("{}:测试结束".format(self.id()))
- def setUp(self) -> None:
- print("{}:测试开始".format(self.id()))
- def test_add(self):
- self.assertEqual(Math().add(1,2),3)
- # 不需要测试的功能,使用装饰器进行装饰
- @unittest.skip("Math.sub方法,功能暂不需要测试。")
- def test_sub(self):
- self.assertEqual(Math().sub(3,2),1)
- if __name__ == '__main__':
- unittest.main()
- """
- ============================= test session starts =============================
- collecting ... collected 2 items
- test_math.py::Testmath::test_add 【=======全部测试开始=====】
- PASSED [ 50%]test_math.Testmath.test_add:测试开始
- test_math.Testmath.test_add:测试结束
- test_math.py::Testmath::test_sub SKIPPED (Math.sub方法,功能暂不需要...) [100%]
- Skipped: Math.sub方法,功能暂不需要测试。
- =================== 1 passed, 1 skipped, 1 warning in 0.04s ===================
- Process finished with exit code 0
- """
unittest模块,测试多个文件
- # 测试文件,都保存在某个目录下,可以集中测试全部文件
# 下面定义一个单独的模块脚本- import os
- import unittest
- class RunAllTest(unittest.TestCase):
- def test_run(self):
- case_path = os.getcwd() # 获取测试文件目录
- discover = unittest.defaultTestLoader.discover(case_path, pattern="test_ma*.py")
- runner = unittest.TextTestRunner(verbosity=2)
- runner.run(discover)
- if __name__ == '__main__':
- unittest.main()
- """
- Testing started at 20:25 ...
- Launching pytest with arguments test_file.py::RunAllTest --no-header --no-summary -q in E:\code\hunjia_16\day11_0824\unittest_demo
- ============================= test session starts =============================
- collecting ... collected 1 item
- test_file.py::RunAllTest::test_run PASSED [100%]【=======全部测试开始=====】
- test_math.Testmath.test_add:测试开始
- test_math.Testmath.test_add:测试结束
- test_add (test_math.Testmath) ... ok
- test_sub (test_math.Testmath) ... skipped 'Math.sub方法,功能暂不需要测试。'
- ----------------------------------------------------------------------
- Ran 2 tests in 0.001s
- OK (skipped=1)
- ======================== 1 passed, 1 warning in 0.01s =========================
- """
2.性能测试cProfile
- #性能分析,profile,以及cprofile模块
- import cProfile #需要导入模块cProfile,注意P是大写
- def plu(num):
- s = 0
- for i in range(num):
- s += i
- return s
- if __name__ == '__main__':
- # 测试plu功能函数,后面可定义结果保存位置,文件名【不定义位置,会直接输出】
- cProfile.run("plu(9999999)", "f:\\test.result")
- """
- ncalls tottime percall cumtime percall filename:lineno(function)
- 函数调用总次数 总运行时间 运行平均时间 总计运行时间 运行一次的平均时间 所在文件名,代码行,函数名
- ncalls tottime percall cumtime percall filename:lineno(function)
- 1 0.000 0.000 0.542 0.542 <string>:1(<module>)
- 1 0.542 0.542 0.542 0.542 cprofile_demo.py:4(plu)
- 1 0.000 0.000 0.542 0.542 {built-in method builtins.exec}
- 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
- """
pstats报告的保存分析
- import pstats #需要先导入模块
- def main():
- stats = pstats.Stats( "f:\\test.result") #定义保存位置
- stats.sort_stats("time") #按照时间排序
- stats.print_stats() # 打印统计报告
- if __name__ == '__main__':
- main()
- """
- Wed Aug 25 16:48:48 2021 f:\test.result
- 4 function calls in 0.589 seconds
- Ordered by: internal time
- ncalls tottime percall cumtime percall filename:lineno(function)
- 1 0.589 0.589 0.589 0.589 E:/code/hunjia_16/day11_0824/xing_neng_ceshi/cprofile_demo.py:4(plu)
- 1 0.000 0.000 0.589 0.589 {built-in method builtins.exec}
- 1 0.000 0.000 0.589 0.589 <string>:1(<module>)
- 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
- """
3.代码规范性检测
python默认是pep8的规范,pycharm就是遵守这个规范,Ctrl+Alt+L可以直接调整格式
pylint模块规范检测组件
- #需要先安装pylint包
- #方法1==================================
- """
- 1.编写一段代码
- 2.进入Terminal窗口
- 3.cd到当前脚本目录
- 4.pylint 文件名
- pylint .\pylint_demo.py
- 5.会得到类似如下返回结果
- ************* Module pylint_demo
- pylint_demo.py:4:0: C0305: Trailing newlines (trailing-newlines)
- pylint_demo.py:1:0: C0114: Missing module docstring (missing-module-docstring)
- pylint_demo.py:1:0: C0115: Missing class docstring (missing-class-docstring)
- pylint_demo.py:2:4: C0116: Missing function or method docstring (missing-function-docstring)
- pylint_demo.py:2:4: R0201: Method could be a function (no-self-use)
- pylint_demo.py:1:0: R0903: Too few public methods (1/2) (too-few-public-methods)
- """
- #方法2==================================
- """
- 1.进入pycharm
- 2.打开settings---Tools---External Tools---添加执行工具----配置相关信息
- 3.运行程序即可
- """
flake8模块规范检测组件
- # 操作同上
Python入门-程序测试的更多相关文章
- Mahout学习之Mahout简介、安装、配置、入门程序测试
一.Mahout简介 查了Mahout的中文意思——驭象的人,再看看Mahout的logo,好吧,想和小黄象happy地玩耍,得顺便陪陪这位驭象人耍耍了... 附logo: (就是他,骑在象头上的那个 ...
- Python入门-程序结构扩展
deque双端队列 #双端队列,就是生产消费者模式,依赖collections模块 from collections import deque def main(): info = deque((&q ...
- Python入门-函数的使用到程序的公布安装
Python入门-函数的使用到Python的公布安装 本文主要适合有一定编程经验,至少掌握一门编程语言的人查看. 文中样例大多都是简单到认识英文单词就能看懂的水平,主要讲的是Python的总体使用方法 ...
- Python入门(一):PTVS写Python程序,调试模式下input()提示文字乱码问题
前两天写了Python入门(一),里面提到,使用VS2013+PTVS进行Python开发. 就在准备为第二篇写个demo的时候,发现了一个问题,各种解决无果,有些纠结 Python中输入函数是inp ...
- python web入门程序
python2.x web入门程序 #!/usr/bin/python # -*- coding: UTF-8 -*- # 只在python2.x 有效 import os #Python的标准库中的 ...
- python入门(7)Python程序的风格
python入门(7)Python程序的风格 Python采用缩进方式,写出来的代码就像下面的样子: # print absolute value of an integer: a = 100 if ...
- python入门(4)第一个python程序
python入门(4)第一个python程序 在交互式环境的提示符>>>下,直接输入代码,按回车,就可以立刻得到代码执行结果.现在,试试输入100+200,看看计算结果是不是300: ...
- 怎么样通过编写Python小程序来统计测试脚本的关键字
怎么样通过编写Python小程序来统计测试脚本的关键字 通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数.业务函数需要修改,那么势必要找出那些引 ...
- 40个Python入门小程序
有不少同学学完Python后仍然很难将其灵活运用.我整理 37 个Python入门的小程序.在实践中应用Python会有事半功倍的效果. 分享 Github 项目,里面收集了 Python 学习资料 ...
随机推荐
- OSPF协议原理及配置2-理解邻居和邻接关系
OSPF是一个动态路由协议,运行OSPF的路由器之间需要交换链路状态信息和路由信息,在交换这些信息之前首先需要建立邻接关系.邻接关系用来交换链路状态及路由信息. 注意:并非所有的邻居关系都可以成为邻接 ...
- .NET 6学习笔记(2)——通过Worker Service创建Windows Service
通过Visual Studio中的Windows Service模板,我么可以创建.NET Framework版本的Windows Service,网络上对此已有详细且丰富的各路教程.但在我们升级到. ...
- CentOS停更;阿里发布全新操作系统(Anolis OS)
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 Linux系统对于Java程序员来说,就好比"乞丐手里的碗",任何业务都离不开他的身影,因为服务端的广泛使用,也因此衍生出了各种 ...
- 阿里云开源镜像站支持IPv6访问
阿里云开源镜像站在国内企业镜像站中率先支持IPv6访问! 点击立即试用https://developer.aliyun.com/mirror/ 同时基于阿里云OpenSearch的搜索能力,开源镜像站 ...
- springboot 踩坑之路之 Configuration Annotation Proessor not found in classpath
1.出现spring boot Configuration Annotation Proessor not found in classpath的提示是在用了@ConfigurationPropert ...
- 深度学习工具LabelXml安装教程
LabelXml安装教程 1,下载LabelXml工具 前往github上下载labelxml,官网地址如下:https://github.com/tzutalin/labelImg 下载打包源码为z ...
- Git-rebase使用原理
使用 Git 已经好几年了,却始终只是熟悉一些常用的操作.对于 Git Rebase 却很少用到,直到这一次,不得不用. 一.起因 上线构建的过程中扫了一眼代码变更,突然发现,commit 提交竟然多 ...
- 进制转换 Java day6
今天周末学习的不多,只学习了一些二进制转十进制,八进制.十六进制,以及数据单位 二进制转十进制 我们都知道十进制转二进制就是除以2取余的方法.那二进制转到十进制又如何处理呢,今天我来学习以下 我们看看 ...
- luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分)
luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分) Luogu 题外话1: LN四个人切D1T2却只有三个人切D1T1 很神必 我是傻逼. 题外话2: 1e6的数据直接i ...
- redis之 主从复制和哨兵(一)
一.Redis主从复制 主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性 1. 主从复制的相关操作 a,配置主从复制方式一.新增redis6380.conf, ...