def

python之unittest单元测试

我怕爱的太早我们不能终老 提交于 2020-12-20 08:22:03
现有一个自行封装的http_requests模块,用于测试http请求,内容如下: import requests class HttpRequests: def __init__(self,url,para): self.url = url self.para = para def http_requests(self,method): try: if method.lower() == 'get': response = requests.get(self.url,params=self.para) return response elif method.lower() == 'post': response = requests.post(self.url,data=self.para) return response elif method.lower() == 'delete': response = requests.delete(self.url,data=self.para) return response except Exception as e: print('请求错误:',e) 怎样利用python的unittest单元测试对其进行场景覆盖测试呢? 首先明确一下unittest单元测试步骤: 引入unittest模块

Python中的单元测试模块Unittest快速入门

随声附和 提交于 2020-12-20 07:13:24
前言 为什么需要单元测试? 如果没有单元测试,我们会遇到这种情况:已有的健康运行的代码在经过改动之后,我们无法得知改动之后是否引入了Bug。如果有单元测试的话,只要单元测试全部通过,我们就可以保证没有Bug被引入。因此,单元测试是保证软件工程质量的一个很重要的方面。 Python中的单元测试 Python最强大的地方在于,开发效率高,并且有丰富的Package,避免重复造轮子。那么Python中的Unittest模块有很丰富的功能提供给我们调用:完整的测试框架,丰富的拓展,比如我们可以设置测试之前的一些初始化工作,比如链接数据库等,规划测试集中有哪些测试用例需要跳过,以及跳过的原因。 Unittest中几个类(Class)的基本概念 TestCase 是我们要写的具体的测试用例 TestSuite 多个测试用例集合在一起,中文翻译过来叫测试套件,其实就是测试集。 TestLoader是用来加载TestCase到TestSuite中的(更通俗一点,就是用来把符合我们定义的条件的测试用例组合起来,成为一个测试集),一般会以参数的形式传进去一些条件,比如收集某个目录下所有的test case组成新的测试集。 TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息 一个简单的测试例子 >>> class

python 多进程、多线程、协程

删除回忆录丶 提交于 2020-12-20 04:12:13
1、python的多线程   多线程就是在同一时刻执行多个不同的程序,然而python中的多线程并不能真正的实现并行,这是由于cpython解释器中的GIL(全局解释器锁)捣的鬼,这把锁保证了同一时刻只有一个线程被执行。   多线程的特点:     线程比进程更轻量级,创建一个线程要比创建一个进程快10-100倍。     线程共享全局变量。     由于GIL的原因,当一个线程遇到IO操作时,会切换到另一个线程,所以线程适合IO密集型操作。     在多核cpu系统中,最大限度的利用多核,可以开启多个线程,开销比进程小的多,但是这并不适合python。   多线程互斥锁:     因为线程共享全局变量,所以需要互斥锁去限制线程对全局变量的更改。     假设,当一个线程在执行到获取全局变量的时候,这个后GIL切换到另一个线程执行,这个时候新的线程为全局变量+1后切换回之前的线程,之前的线程中的全局变量还是+1前的值,所以需要互斥锁。   为什么有了GIL锁还要互斥锁呢?     GIL锁只是控制同一时刻下只有一个线程被执行,这并不能控制同一时刻只有一个线程去获取并更改全局变量,所以需要使用互斥锁。   多线程的实现: # 导入threading模块 import threading # 定义全局变量 i= 0 # 定义互斥锁 mutex = threading.Lock()

python之接口自动化测试框架

╄→尐↘猪︶ㄣ 提交于 2020-12-19 18:24:31
梳理python+unittest接口自动化测试框架的思路: 1.确定目录: cases:存放测试用例的py文件;config:存放一些数据库,环境地址等固定不变的信息; core:核心的文件, cases:测试用例test_cj.py,代码如下: import unittest import os import jsonpath from core.my_requests import MyRequest from conf.setting import default_host from core.tools import mysql from core.tools import r as redis class Cj(unittest.TestCase): username = ' autotest_lyh78910 ' # 自动化测试注册的用户 password= ' aA123456 ' # 类变量 def test_reg(self): # post请求,请求参数为username,pwd,cpwd. ''' 注册接口 ''' url = ' /api/user/user_reg ' new_url = os.path.join(default_host,url) data ={ ' username ' :self.username, ' pwd ' :self

[Python] Python 获取中文的首字母 和 全部拼音首字母

Deadly 提交于 2020-12-19 16:45:26
Python 获取中文的首字母 和 全部拼音首字母 代码如下: import pinyin def getStrAllAplha(str): return pinyin.get_initial(str, delimiter= "" ).upper() def getStrFirstAplha(str): str = getStrAllAplha(str) str =str[ 0 : 1 ] return str.upper() str = ' 你好在哪来 ' print(getStrAllAplha(str)) print(getStrFirstAplha(str)) 输出: NHZNL N 本博客地址: wukong1688 本文原文地址: https://www.cnblogs.com/wukong1688/p/11149049.html 转载请著名出处!谢谢~~ 来源: oschina 链接: https://my.oschina.net/u/4417863/blog/3473310

Unittest框架小结

偶尔善良 提交于 2020-12-19 16:44:22
  在日常的自动化测试过程中,Python里有一个自带的单元测试框架是unittest模块,简单易用,这里简单介绍下其主要的用法。    Unittest测试框架主要包含四个部分   TestCase 也就是测试用例   TestSuite 多个测试用例集合在一起,就是TestSuite   TestLoader是用来加载TestCase到TestSuite中的   TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息   这里盗一波图来图文并茂的介绍一波框架运作流程:    来一发实例。压压惊~ 第一步:编写测试用例: # -*- coding: utf-8 -*- # 先设置编码,utf-8可支持中英文,如上,一般放在第一行 # 注释:包括记录创建时间,创建人,项目名称。 ''' Created on 2018-10-12xxxx __author__ = 'xxxx' Project:使用unittest框架编写测试用例 ''' import unittest # 定义测试类,父类为unittest.TestCase。 # 可继承unittest.TestCase的方法,如setUp和tearDown方法,不过此方法可以在子类重写,覆盖父类方法。 # 可继承unittest

python模块之psutil源码解析

☆樱花仙子☆ 提交于 2020-12-19 14:59:48
做监控的时候,可能会用到psutil这个python包来获取机器的cpu、memory、disk、net、os和一些其他的信息,今天对psutil这个包做了进一步的分析。各项参数的获取大同小异,此处以memory为例。 获取psutil python包,github https://github.com/giampaolo/psutil 此处指定获取相关信息的主目录,如:linux环境下, psutil/ init .py if LINUX: ... PROCFS_PATH = "/proc" ... 获取内存的信息,从如下代码可以看到内存信息的获取“/proc/meminfo”。 /psutil/_pslinux.py def virtual_memory(): ... missing_fields = [] mems = {} with open_binary('%s/meminfo' % get_procfs_path()) as f: for line in f: fields = line.split() mems[fields[0]] = int(fields[1]) * 1024 total = mems[b'MemTotal:'] free = mems[b'MemFree:'] ... def swap_memory(): ... mems = {} with

python网络-Socket之udp编程(24)

假如想象 提交于 2020-12-19 12:59:09
一、udp简介 udp --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议。 udp不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。 udp在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。 udp是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。 二、udp特点: udp是面向无连接的通讯协议,udp数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 udp传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 udp是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。udp是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的,udp一般用于多点通信和实时的数据业务,比如: 语音广播 TFTP(简单文件传送) SNMP(简单网络管理协议) RIP(路由信息协议,如报告股票市场,航空信息) DNS(域名解释) 三、udp网络程序-发送数据 创建一个udp客户端程序的流程是简单,具体步骤如下: 创建客户端套接字 发送/接收数据 关闭套接字 代码如下: # coding=utf-8

python3 爬虫百度贴吧

纵然是瞬间 提交于 2020-12-19 12:00:17
import urllib.request import urllib.parse from lxml import etree def loadPage(url): """ 作用:根据url发送请求,获取服务器响应文件 url: 需要爬取的url地址 """ #print url #美女 # headers = {"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0)AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"} request = urllib.request.Request(url) html = urllib.request.urlopen(request).read() # 解析HTML文档为HTML DOM模型 content = etree.HTML(html) #print content # 返回所有匹配成功的列表集合 link_list = content.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href') #link_list = content.xpath('//a[@class="j_th_tit"]/@href') for

Python学习笔记九(UDP套接字和并发编程)

和自甴很熟 提交于 2020-12-19 11:08:12
一、UDP套接字 服务端 from socket import * server = socket(AF_INET,SOCK_DGRAM) server.bind(( " 127.0.0.1 " ,8080 )) while True: data,client_addr = server.recvfrom(1024 ) server.sendto(data.upper(),client_addr) 客户端 from socket import * client = socket(AF_INET,SOCK_DGRAM) while True: msg = input( " >> " ).strip() client.sendto(msg.encode( " utf-8 " ),( " 127.0.0.1 " ,8080 )) data,server_addr = client.recvfrom(1024 ) print (data.decode( " utf-8 " )) 二、进程相关定义 进程是指程序的运行过程。每个进程都拥有自己的地址空间、内存、数据栈以及其他用于跟踪执行的辅助数据。 多道技术:内存中同时存入多个程序,cpu从一个进程快速切换到另一个,使得每个进程各自运行几十或几百毫秒,虽然在一个时刻,一个cpu只执行了一个任务,但1秒内,cpu却可以运行多个进程