自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(281)
  • 收藏
  • 关注

原创 十年测试老兵万字长文教你构建软件测试知识体系和技能树(附思维导图)

这份思维导图中,我将软件测试的知识体系或者叫技能树分成两部分,一个是计算机基础,一个是专项测试。我把计算机基础叫做内功,专项测试叫做招式。我认为软件测试水平高低往往取决于内功的深厚程度。招式易学,内功难修。

2020-04-07 11:35:58 5713 5

原创 通过容器化Python web应用了解Docker容器的核心功能

以容器化 Python Web应用为案例,讲解了 Docker 容器的使用主要方法。包括构建镜像、启动镜像、分享镜像、在镜像中操作、在镜像中挂载宿主机目录、对容器使用的资源进行限制、管理容器的状态和如何保持容器始终运行。

2019-05-12 19:57:49 1238

原创 利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境

本文给大家介绍了如何使用pyenv安装多个版本Python,如何在不同的Python版本间切换。还介绍了一种Python官方推荐使用的包管理工具pipenv,它结合pyenv和pip和virtualenv的优点于一身,可以帮我们管理项目的虚拟环境、管理项目的依赖包。

2018-03-16 16:35:39 17000 4

原创 【Pytest】python单元测试框架pytest简介

1、Pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点:非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考能够支持简单的单元测试和复杂的功能测试支持参数化执行测试过程中可以将某些测试跳过,或者对某些预期失败的case

2015-06-15 11:41:16 88741 9

原创 【Vue学习笔记7】Vue3中如何开发组件

例子3要学习 https://zhuanlan.zhihu.com/p/458308850重点学习:vue3.0之组件通信机制defineProps(组件接收外部传来的参数)、defineEmits(向组件外部传递参数)。

2023-05-08 20:34:49 957

原创 【Vue学习笔记6】好用的 Vueuse 工具包

useFullscreen 的封装逻辑和 useStorage 类似,都是屏蔽了浏览器的操作,把所有我们需要用到的状态和数据都用响应式的方式统一管理,VueUse 中包含了很多我们常用的工具函数,我们可以把网络状态、异步请求的数据、动画和事件等功能,都看成是响应式的数据去管理。VueUse 的官方(https://vueuse.org/)的介绍说这是一个 Composition API 的工具集合,适用于 Vue 2.x 或者 Vue 3.x,用起来和 React Hooks 还挺像的。

2023-05-06 18:41:57 1194

原创 【Vue学习笔记5】Vue3中的响应式:ref和reactive、watchEffect和watch

所谓响应式就是界面和数据同步,能实现实时更新。Vue 中用过三种响应式解决方案,分别是 defineProperty、Proxy 和 value setter。Vue 2 使用的方案是 defineProperty API。Vue3中使用的方案是Proxy和value setter。

2023-05-06 17:47:46 1304

原创 【Vue学习笔记4】基于Vue3的Composition API + <script setup>

继续前面的学习笔记。

2023-05-05 18:36:51 554

原创 【Vue学习笔记3】使用Vite开启一个Vue3工程项目

Vite是一个web开发构建工具。Vite 的竞品是 Webpack,而且按照现在的趋势看,使用率超过 Webpack 也是早晚的事。Vite 主要提升的是开发的体验,Webpack启动调试环境需要 3 分钟都很常见,Vite大大缩短了这个时间。

2023-05-05 15:27:39 4460

原创 【Vue学习笔记2】通过一个累加器,对比Vue2和Vue3的不同

先举个 Vue 2 中的简单例子,一个累加器,并且还有一个计算属性显示累加器乘以 2 的结果。在 Vue 3 中,除了上面这种这个写法,我们还可以采用下方的写法。

2023-04-28 18:25:47 100

原创 【Vue3学习笔记1】一个清单应用帮你入门Vue.js

可以说,Vue 3 很好地拥抱了未来,并且在新手友好度上做到了极致。生态中还多了 Vite 这个新⼀代工程化工具。更有料的 TypeScript 支持;基于 Proxy 的全新响应式实现;新的 VDOM diff 逻辑;更小的体积 + 更高的性能;组织代码的更优方式;

2023-04-27 20:21:38 747

原创 【Selenium4自动化测试(5)】定位元素

操作WEB应用程序上的元素,首先是要定位到元素。Selenium的WebDriver类提供了和方法对元素进行定位。当找到元素后,会返回一个WebElement对象,如果找不到元素,则会报异常。和的第一个参数是元素定位策略,第二个参数是对应策略需要的值。...

2022-07-16 18:43:26 766

原创 【Selenium4自动化测试(4)】Selenium IDE

SeleniumIDE是Selenium提供的一个浏览器插件,支持Chrome和Firefox浏览器。可以实现Web操作的录制和回放,还可以生成自动化脚本。对于初学者使用Selenium提供了很好的入门帮助,可以不用写一行代码就可以完成WEB应用的自动化测试。......

2022-07-16 17:59:33 422

原创 【Selenium4自动化测试(3)】第一个自动化测试用例

为了开展本次课程,我们先搭建一个被测系统。

2022-07-16 17:49:53 425

原创 【Selenium4自动化测试(2)】搭建Selenium开发环境

还有一种,不配置全局的环境变量PATH,而是在代码中指定浏览器驱动程序的位置。Selenium需要配置浏览器驱动,才能驱动浏览器执行动作。第一步,安装Selenium工具集合。第二步,配置浏览器驱动。......

2022-07-16 17:44:57 701

原创 【Selenium4自动化测试(1)】Selenium4简介

Selenium是一个开源免费,用于WEB应用程序自动化测试的工具集,包含SeleniumWebdriver、SeleniumIDE、SeleniumGrid三个组件。Selenium直接驱动浏览器进行模拟用户的操作。开源免费支持多种浏览器支持多种平台支持多种编程语言支持分布式测试支持录制回放。...............

2022-07-16 17:16:55 902

原创 测试开发之Python核心笔记(30):Python反射的应用

通常,我们操作对象的属性或者方法时,是通过点“.”操作符进行的。例如下面的代码:class Person: type = "mammal" def __init__(self, name): self.name = name def say_hi(self): print('Hello, my name is', self.name) @staticmethod def feed(): print("Three

2021-08-15 13:02:24 511 2

原创 测试开发之Python核心笔记(29):队列及其操作

classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawl(amount)mermaid

2020-10-09 14:27:35 818

原创 【Python全栈测试开发实战1】搭建测试开发环境

我们经常会遇到这样的开发需求,比如你手头有多个开发项目,其中项目A要求用python3.7,项目B需要用python3.6,有要求项目A和项目B依赖包相互独立,互不干扰。为了满足这样的开发需求,我们需要在自己的电脑上安装多个Python版本,并且项目之间进行环境隔离。要想安装多个Python版本,可以利用pyenv这个好用的工具,对于建立多个项目之间隔离的开发环境,可以借助于pipenv这个更加好用的包管理工具。这篇文章将给大家介绍如何利用pyenv和pipenv来管理我们的python开发环境,主要讲两

2020-09-10 11:20:42 1862 1

原创 测试开发之Python核心笔记(11):列表相关算法

程序设计中,有一种最最基础的数据结构是数组,数组把相同类型的若干个元素按连续顺序存储在内存中。数组通过索引来记录元素的位置。大多数编程语言中,数组的索引从0开始。如果索引超出了数组的范围,会报数组越界异常。在Python中,数组中的元素类型不要求必须保持一致,而且支持负数索引,比如-1表示数组中最后一个元素。在Python中,数组被封装成列表(List),是一种容器类型,具有更多的高级功能。例如:列表将数组插入、删除数据时搬移其他数据的操作进行了封装。列表支持动态扩容。在项目开发中,对于业务开发

2020-08-27 18:00:28 718 1

原创 测试开发之Python核心笔记(19): 深入理解类的属性

属性作为类的重要组成部分,除了平时常用的读取和设置操作之外,还有很多隐藏的、高级的操作。比如属性的查找顺序、属性的类型检查、限制属性的动态添加等等。这一小节,就让我们深入理解属性的各种高级操作。19.1 通过字符串操作属性和方法反射是一个很重要的概念,它可以把字符串映射到实例的属性或者方法,然后可以去执行调用、修改等操作。Python提供了四个函数,可以通过字符串操作属性和方法:hasattr、getattr、setattr和delattr。但是要注意属性和方法不能是私有的,如果是以“_”开头的属性和

2020-08-13 19:16:25 741 1

原创 测试开发之Python核心笔记(26): 协程

协程是实现并发编程的一种方式。 Python 3.7 以上版本中,使用协程写异步程序非常简单。26.1 同步与异步我们首先来区分一下 Sync(同步)和 Async(异步)的概念。所谓 Sync,是指操作一个接一个地执行,下一个操作必须等上一个操作完成后才能执行。而 Async 是指不同操作间可以相互交替执行,如果其中的某个操作被 block 了,程序并不会等待,而是会找出可执行的操作继续执行。从而可以提高效率。26.2 Asyncio原理Python使用Asyncio库进行异步编程。Async

2020-08-12 17:50:47 796 1

原创 测试开发之Python核心笔记(25): 多进程与多线程

25.1 并发和并行并发Concurrency工作互相切换,如线程切换和任务切换多线程(线程切换)、协程(任务切换)并行Parallelism同一时刻、同时发生多进程并行还是并发?并发通常应用于 I/O 操作频繁的场景,比如你要从网站上下载多个文件,I/O 操作的时间可能会比 CPU 运行处理的时间长得多。而并行则更多应用于 CPU heavy 的场景,比如 MapReduce 中的并行计算,为了加快运行速度,一般会用多台机器、多个处理器来完成。25.2 多线

2020-08-12 17:47:36 500

原创 测试开发之Python核心笔记(24):日志

日志主要目的是在程序运行过程中,输出我们感兴趣的内容,以便程序出现异常时,我们根据日志排查问题。Python中内置的日志模块是logging。24.1 日志级别日志输出的内容是分等级的,我们可以根据等级控制输出的内容。可以通过help(loggging)查看日志帮助文档,文档最下方列出了Python支持的日志级别。DATABASIC_FORMAT = ‘%(levelname)s:%(name)s:%(message)s’CRITICAL = 50DEBUG = 10ERROR = 40F

2020-08-12 17:22:09 558

原创 测试开发之Python核心笔记(23):抽象类、枚举类与元类

23.1 抽象类抽象类是一种特殊的类,只能有抽象方法(没有实现功能),有两个典型特点:不能被实例化,只能被继承。强制子类必须实现抽象方法,使用相同的方法和方法名称。抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),通常用作类似JAVA中接口的作用,用来规范子类的行为。让每个人可以关注抽象类的方法和描述,而不需要考虑过多的实现细节,通过抽象类操作具体类的实例。看一个例子:from abc import ABCMeta, abst

2020-08-12 14:38:49 495

原创 测试开发之Python核心笔记(22):组合、继承与多态

20.1 多用组合不同的类可以混合使用,加入到其他类中,来增强类的功能和代码重用性。也就是一个类的属性可以是其他类的实例。当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好。来看一个例子:class Name: def __init__(self, first_name, last_name): self.first_name = first_name self.last_name = last_name def __str__(s

2020-08-12 14:23:43 928 3

原创 测试开发之Python核心笔记(21):对象的比较与拷贝

21.1 变量与对象的关系Python中任何事物都是对象,包括变量、函数和类,都是对象。表达式a=‘s’中的字符串’s’就是对象。换句话说,变量a指向了对象’s’。变量就相当于一个标签,这个标签标识了一个对象。每一个对象都是由三部分组成:标识符(identity)、类型(type)、值(value)组成。标识符:每个对象都有唯一的标识,来标识自己,可以使用内置函数id()来查看对象的标识。例如查看变量a的标识,标识可以简单的认为这个值是该对象的内存地址:>>> id(a)4310

2020-08-11 17:28:00 499

原创 测试开发之Python核心笔记(20): 类内置高级方法

当我们定义了一个类之后,Python会自动为我们提供一些方法,这些方法大部分是从object类或者type类继承来的。我们可以覆盖这些方法实现特定的操作。20.1 让对象打印出来更易读用print()打印对象,会展示__str__()函数的内容,直接运行实例的时候,打印的对象,会展示__repr__()函数的内容。因此可以通过实现__str__()和__repr__()这两方法,让对象打印出来更符合人类阅读。比如class Student: def __init__(self, name, a

2020-08-11 16:58:34 722 1

原创 测试开发之Python核心笔记(18): 类与对象入门

Python是面向对象编程语言。面向对象编程中两个最基本的概念就是类和对象。类是一群有着相同属性和函数的一类对象的模板,类实例化后产生对象。在Python中创建一个类和对象是很容易的。18.1 定义一个类使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾,通常类名首字母大写:下面是一个类的例子:class Document: """ 这是一个文档字符串 """ # 类变量 WELCOME_STR = 'Welcome! The contex

2020-08-10 14:40:36 401

原创 测试开发之Python核心笔记(17): 调试程序

17.1 为什么要调试代码本身有问题,需要我们找到 root cause 并修复代码效率有问题,比如过度浪费资源,latency很大,因此需要我们 debug在开发新的 feature 时,一般都需要测试阅读开源项目时,通过调试了解处理逻辑17.2 调试方法17.2.1 print调试法对于简单的程序,使用print函数输出可以进行调试。但是对于大型程序,怀疑出错的地方可能很多,就可能代码中需要写大量的print函数。调试完毕后,还要再删除掉。显然比较麻烦。17.2.2 Pycharm断

2020-08-09 17:26:57 1107 1

原创 测试开发之Python核心笔记(16):模块与包

16.1 概念函数、类、常量拆分到不同的.py文件,这些文件就是模块将多个模块放到一个文件夹中,这个文件夹就是包,包中通常还包含一个文件__init__.py,表述包对外暴露的模块接口。内容也可以为空,并不是必须的。通过模块和包组织的项目,组织结构看起来更加清晰,例如基于Pytest的自动化测试项目的结构:├── Pipfile├── Pipfile.lock├── config│ ├── prod│ └── test├── conftest.py├── data│ └

2020-08-09 17:05:01 472

原创 测试开发之Python核心笔记(15):迭代器与生成器

15.1 可迭代对象Iterable还记得for循环吗?for循环可以循环迭代处理字符串以及列表、元组、字典、集合这些容器类型,知道为什么这些数据类型可以被for迭代吗?因为这些对象都是可迭代对象。判断是否是可迭代对象,可以isinstance(obj, Iterable)判断,输出True表示obj对象是可迭代的(iterable)。15.2 迭代器iterator通过迭代器,程序员可以迭代非序列类型,就是除了列表、元素、字典和集合之外类型。迭代器通过next()方法获取对象中的下一个元素,可以

2020-08-09 16:52:51 1150 1

原创 测试开发之Python核心笔记(14): 装饰器

14.1 概念所谓的装饰器,其实就是通过装饰器函数,来修改原函数的一些功能,使得原函数不需要修改。装饰器依赖前面介绍的Python函数的五个特性:函数也是对象函数对象可以赋值给变量函数对象可以作为参数传递给另外的函数函数对象可以作为另外一个函数的返回值函数可以嵌套定义14.2 函数装饰器14.2.1 装饰器的简单例子my_decorator() 是一个装饰器,它把真正需要执行的函数 func() 包裹在其中,并且改变了它的行为,但是原函数 func不变。定义装饰器分三步走:调用原函

2020-08-09 16:50:26 421

原创 测试开发之Python核心笔记(13):递归函数

13.1 概念在函数内部,可以调用其他函数。如果一个函数在内部调用自身,这个函数就是递归函数。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。计算阶乘n! = 1 x 2 x 3 x … x n,用函数fact(n)表示:def fact(n): if n==1: return 1 return n * fact(n - 1)13.2 写递归代码的套路写递归代码的关键就是找到如何将大问题分解为小问题的规律,然后按照下面套路即可实现:第一步,写出

2020-08-09 16:44:04 448

原创 测试开发之Python核心笔记(12): 匿名函数与高阶函数

12.1 定义匿名函数匿名函数应用非常广泛。常用在不方便定义常规函数的地方,作为参数的值来使用。lambda开头 接着参数列表,接着冒号,后面是表达式,函数返回值就是表达式的值。lambda x: x**2可以赋值给变量:>>> square = lambda x: x**2>>> square(3)912.2 匿名函数的用处用在常规函数 def 不能用的地方,比如,用在列表内部[(lambda x: x*x)(x) for x in

2020-08-09 16:42:03 757

原创 测试开发之Python核心笔记(10):Python函数

10.1 定义函数使用def关键字函数可以有返回值也可以没有返回值# content of test_sample.pydef inc(x): # 有返回值 return x + 1def test_answer(): # 没有返回值 assert inc(3) == 510.2 调用函数add_one=inc(3)函数被调用时,这个函数此前必须定义过10.3 函数的参数10.3.1 位置参数def divmod(x, y): # known

2020-08-09 16:37:03 621

原创 测试开发之Python核心笔记(9):时间与日期

时间在编程中应用广泛:日志、统计程序性能、统计函数执行时长等。Python 与时间处理相关模块有:time 模块和 datetime 模块。9.1 time模块在 Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的。time 模块是围绕着 Unix Timestamp 进行的。五个常用函数:获取当前时间戳timestamp = time.time() # 1590465647.9812.

2020-08-09 12:50:27 328

原创 测试开发之Python核心笔记(8):错误与异常

8.1 概念程序中的错误通常包括两种,一种是语法或逻辑错误,另一种则是运行时的异常。Python3版本的异常类型请参考:https://docs.python.org/3/library/exceptions.html。为了程序的健壮,代码要对可预知的异常进行处理。8.2 处理异常8.2.1 try…except通常使用 try 和 except 来解决异常。try: s = input('please enter two numbers separated by comma

2020-08-09 12:47:00 304

原创 测试开发之Python核心笔记(7):输入与输出

输入输出的设备主要有键盘、屏幕、网卡、文件等。7.1 键盘和屏幕input接收键盘的输入,得到的是字符串,name = input('your name:'),要想的到数字,需要进行类型转换print输出到屏幕,print(“Hello world”)7.2 文件路径对文件系统的访问,大多通过Python的os模块实现。该模块是Python访问文件系统功能的主要接口。通过下面代码可以查看os模块的全部功能。>>> import os>>.

2020-08-09 12:44:33 848

原创 测试开发之Python核心笔记(6):分支与循环

6.1 分支根据不同条件,进入到不同的处理逻辑逻辑中,条件判断使用if语句。条件判断最好是显性的,写的明明白白的。6.1.1 两个分支例如,取绝对值:if x < 0: y = -xelse: y = x再如,取两个数中的较小值,可以写在同一行:smaller = x if x< y else y上面取绝对值的代码也可以写在一行:absolute= x if x>0 else -x条件表达式用 in 或者not in可以大大简化代码,比如:cm.

2020-08-09 12:40:04 431

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除