- 博客(174)
- 收藏
- 关注
原创 聊聊软件测试的那些事
笔者入行软件测试行业也有两年左右的时间了,这两年中,在工作中也学习、积累了一些知识,但是每每谈及理论,又好像怎么也说不清一些东西的定义。其实很多人认为,知识学习了会用就可以,但软件测试的道路上,打好基础是很重要的,有些东西你知道但无法清晰表达,只能说明理解的还不够透彻。所以笔者决定从头开始,对一些知识进行总结,同时也是一次学习的过程。很多人入行软件测试,是因为它比软件开发简单,入门门槛低且收益可观,毫不避讳的说,笔者也是这些人其中之一。最开始选择软件测试就是因为这个职业与软件开发一样,薪资高,但是最开始
2021-04-10 12:59:03 337 3
原创 使用python+selenium编写第一个用例
Mac电脑是自带了python2.7的,当用户下载新版本的python时,可能会由于两个版本的隔离性引发一些问题。博主在写这篇博客之前,就遇到了这个问题。明明已经下载了selenium,但是当写了一个简单的python脚本去运行的时候,会报selenium找不到。这种时候,最简单的解决办法就是下载PyCharm,通过pip3去install selenium,这样selenium的安装路径就在python3下。当你使用python3版本去run job时,就不会有什么问题啦。下面简单提一下python+s
2020-06-06 17:34:36 441
原创 robotframework安装
首先声明,该安装教程是针对Mac电脑的。第一步:Mac自带了python3,如果不确定自己电脑上是否已经安装了python的话,可以在terminal运行指令:python3若终端命令行显示如下图所示,则证明已经安装了python3。第二步:下载robotframework,执行命令如下:pip install robotframework若控制台提示ERROR: Could not install packages due to an EnvironmentError: [Errno
2020-06-03 22:04:59 323
原创 《探索式软件测试》学习笔记(一)
缺陷预防缺陷预防技术一般是从开发人员的角度来说的,包括编写更好的设计规范,实施代码审核制度(code review),运行代码静态分析工具(static analysis tool),运行单元测试(unit testing)。缺陷检测测试人员一般使用两种形式的动态测试:自动化测试和手工测试。手工测试如果想发现与应用程序业务逻辑相关的缺陷,手工测试是最理想的选择。...
2020-04-27 14:22:09 375
原创 page cache简介
定义中文名称:页高速缓冲存储器,简称页高缓。单位:页。大小:动态变化,因为操作系统会将所有未直接分配给应用程序的物理内存都用于页面缓存。 文件系统层级的缓存:page cache用于缓存文件的页数据,从磁盘中读取到的内容是存储在page cache里的。结构在 Linux 的实现中,文件 Cache 分为两个层面,一是 Page Cache,另一个是 Buf...
2019-12-31 17:42:44 8288
原创 Yarn入门简介
定义∙ Yet Another Resource Negotiator —— 另一种资源协调者∙ 通用的资源管理模块,为各类应用程序进行资源管理和调度产生背景MapReduce本身存在一些问题: ∙ JobTracker单点故障问题 —— 如果Hadoop集群的JobTracker挂掉,则整个分布式集群都不能使用了。 ∙ JobTracker承受的访问...
2019-12-31 17:14:44 348
原创 大数据系列之zookeeper入门简介
定义Zookeeper是一个分布式服务框架,主要用来解决分布式应用中经常遇到的一些数据管理问题,为分布式应用提供一致性服务,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。特性∙ 顺序一致性——从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到Zookeeper中去。∙ 原子性——所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,即...
2019-12-31 17:03:42 256
原创 大数据系列之Spark入门简介
定义分布式批处理系统和分析挖掘引擎。特性1、高效性。Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG(无回路有向图)执行引擎,可以通过基于内存来高效处理数据流。2、易用性。Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。3、通用性。Spark提供了统一的...
2019-12-31 16:56:49 312
原创 Flink入门大全
定义∙ 一个批处理和流处理结合的统一计算框架∙ 核心是一个提供了数据并发以及并行化计算的流数据处理引擎特性∙ 提供准确的结果,甚至在出现无序或者延迟加载的数据的情况下∙ 它是状态化的容错的,同时在维护一次完整的的应用状态时,能无缝修复错误∙ 大规模运行,在上千个节点运行时有很好的吞吐量和低延迟无界流和有界流任何类型的数据都是作为事件流产生的。信用卡...
2019-12-31 16:49:45 441 1
原创 Kafka入门大全
定义一个分布式、分区的、多副本的实时消息发布和订阅系统。特点消息持久化——消息被持久化到本地磁盘,支持数据备份以防数据丢失高吞吐量——即使是普通硬件,Kafka也支持每秒数百万的消息可拓展性——搭建在分布式集群服务器上,支持水平无限拓展容错性——将数据副本存放在多台服务器上,避免服务器故障影响运行高并发——将数据分片后存在多台服务器上,在多台客户端上读取消息...
2019-10-16 20:55:20 230
原创 C语言基础代码(7)
1、使用可变参数,实现函数,求函数参数的平均值。#include <stdio.h>#include<stdarg.h>int average(int n,...){ va_list arg; int i = 0; int sum = 0; va_start(arg,n); for(i = 0;i < n;i++){...
2019-02-27 18:02:35 2029 1
转载 详解this指针--为什么空的对象指针可以调用成员函数
引题class A{public: void function() { cout << "I can run" << endl; }};int main(){ A* pa = NULL; pa->function(); system("pause"); return 0;}...
2018-08-10 18:21:15 768
原创 高级IO——I/O多路转接之epoll
epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。根据man手册的说法,epoll是为处理大批量句柄而作了改进的poll。epoll是在205044内核中被引进的,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 e...
2018-08-04 11:42:17 559
原创 get一种简单重建二叉树的方法
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。代码:/** * Definition for binary tree * struct TreeNode { * int v...
2018-07-30 15:01:55 209
原创 C++之类和对象(二)
类的默认成员函数 一、构造函数成员变量为私有的,要对它们进行初始化,必须用一个公有成员函数来进行。同时这个函数应该有且仅在定义对象时自动执行一次,这时 调用的函数称为构造函数(constructor)。构造函数是特殊的成员函数,其特征如下:1. 函数名与类名相同。2. 无返回值。3. 对象构造(对象实例化)时系统自动调用对应的构造函数。4. 构造函数可以重载。...
2018-07-23 23:19:12 210
原创 C++之类和对象(一)
面向对象 面向对象(Object Oriented Analysis Design,OOAD)的思想把整个世界看成是由具有某种特征行为功能的基本单元——对象构成的。OOAD把一个对象的特征称为属性,把其行为称为一种方法。一个对象,可以接受外部信息,也可以向外部提供某种服务,我们可以将参数传递给对象,请求对象处理之后返回给我们,即提供了服务。面向对象的三大特征:封装、继承、多态。 ...
2018-07-23 22:37:59 244
原创 C++之引用
初识引用 引用是C++引入的新语言特性,是C++常用的一个重要内容之一。所谓引用,不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。对引用的操作与对变量直接操作完全一样。引用的格式为:类型 &引用变量名 = 已定义过的变量名;举个例子:#include <iostream>using namespace std;int ma...
2018-07-23 16:55:24 233
原创 C++之命名空间
命名空间是随着标准C++而引入的,它相当于一个更加灵活的文件域(全局域),可以用花括号将文件的一部分括起来,并以关键字namespace开头,给它起一个名字,这段区域即为命名空间域。命名空间可嵌套使用。namespace name1{ int a = 0;}namespace name2{ int a = 1;}name1::a = 3;name2::a...
2018-07-23 14:43:13 213
原创 C++之缺省参数
缺省参数,就是在声明函数的某个参数时为其指定一个默认值,在调用该函数时,若采用该默认值,就无需指定该参数。缺省参数使用的主要规则:调用时只能从最后一个参数开始进行省略。也就是说,只能从右往左缺省,并且缺省参数连续。int Add1(int a = 0,int b = 0){ //全缺省:参数列表中的参数均为缺省参数 return a+b;}int Add2(int a,i...
2018-07-18 17:50:19 306
原创 C++支持重载而C语言不支持的原因解析
C++是C语言的继承,它既可以进行C语言的过程化设计,也可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。在分析为什么C++支持重载而C语言不支持的原因之前,我们先来了解一下函数重载的概念。函数重载是指在同一作用域类,一组函数的函数名相同,参数列表不同。这里的参数列表不同,可以是参数个数不同,也可以是参数的类型不同。函数的返回值可同可不同。...
2018-07-18 17:22:34 431
原创 C++简介
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C语言几乎是C++的一个子集,所以C语言支持的语法在C++基本上都支持并需要使用。C++在C语言的基础上又有了许多新的特性。C++共有63个关键字:C++的数据类型有: ...
2018-07-18 16:44:20 267
原创 将数组旋转90度
将一个正方形数组旋转90度,然后打印出结果。#include <stdio.h>#include<stdlib.h>#define N 4void rotate(int arr[N][N],int a,int b,int c,int d){ for(int i = 0;i < d-b;++i){ int tmp = arr[a][b...
2018-07-17 23:02:26 1586
原创 C++——命名空间
在C++中,变量、函数和类都是大量存在的。如果没有命名空间,这些变量、函数、类的名称将都存在于全局命名空间中,会导致很多冲突。比如,如果我们在自己的程序中定义了一个函数toupper(),这将重写标准库中的toupper()函数,这是因为这两个函数都是位于全局命名空间中的。命名冲突还会发生在一个程序中使用两个或者更多的第三方库的情况中。此时,很有可能,其中一个库中的名称和另外一个库中的名称是相同的...
2018-06-27 22:35:04 222
原创 C++基础知识
C++是一种面向对象的计算机程序设计语言,由美国贝尔实验室的本贾尼·斯特劳斯特卢普博士在20世纪80年代初期发明并实现。它是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。C++是C语言的继承,进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。开始,C++是作为C语言的增强版出现的,从给C语言增加...
2018-06-27 21:58:30 234
原创 Shell脚本学习笔记——awk
sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位,还能以列为单位处理文件。awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义。awk的基本用法和sed类似,awk命令行的基本形式为:awk option 'script' file1 file2 ...awk option -f scriptfile file1 ...
2018-06-21 23:25:27 243
原创 Shell脚本学习笔记——sed
sed是一种流编辑器,它是文本处理中的工具,能够完美的配合正则表达式使用。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲器中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。sed默认按照Basic规范...
2018-06-21 22:23:28 258
原创 Shell脚本学习笔记——xargs
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具,它擅长将标准输入数据转换成命令行参数。xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换成其他格式。xargs的默认命令是echo,空格是默认定界符。常见选项(1)-n:指定列数,并多行输出。(2)-d:自定义一个域分隔符,将特定列打散,并指定格式输出。(3)-i:...
2018-06-21 21:17:21 310
原创 Shell脚本学习笔记——cut
cut 命令从文件的每一行剪切字节、字符和字段,并将这些字节、字符和字段写至标准输出。cut 必须指定-b 、-c 或 -f 标志之一。常见选项(1)-b:以字节为单位进行分割。(2)-c:以字符为单位进行分割。单单这么看,-b 和 -c 好像没有什么区别。但是我们换成中文字符,差别就显现出来了。这是因为Linux默认用 utf8 进行编码,而以utf8的标准,一个中文字符占三个字节,清楚了这一点...
2018-06-21 19:57:34 436
原创 Shell脚本学习笔记——paste
paste单词的意思是粘贴。该命令主要用来将多个文件的内容合并。paste将按行把不同文件行信息放在一行。缺省情况下,paste连接时,用空格或者tab键分隔新行中不同文本。常用选项(1)-d 的作用是指定域分隔符。(2)-s 作用是将每个文件合并成行,而非按行粘贴。(3)- 是占位符,指定一行中放几个元素。...
2018-06-21 17:27:21 596
原创 Shell脚本学习笔记——uniq
uniq 的作用是相邻行去重。常见选项(1)-c 的作用是标识出重复行的重复次数。(2)-d 表示只显示重复行。(3)-u 表示只显示文件中不重复的各行。练习结合sort、uniq工具,求file1 和 file2 的交集、并集和补集。file1 和 file2 的内容如下:解题思路:将file1 和 file2 两个文件合并成一个文件进行操作。...
2018-06-21 17:12:37 242
原创 Shell脚本学习笔记——sort
原则sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将它们按升序输出。常见选项(1)sort默认的排序方式是升序,如果想改成降序,使用 -r 选项即可。(2)-u 选项,作用是在输出行中去除重复行。(3)-n 选项,指定使用按数值的方式来排序。(4)-t 和 -k 选项,可以设定间隔符。-t 指定间隔符,-k 指定域。这句话的意思就是,以 :...
2018-06-21 16:39:42 321
原创 Shell脚本学习笔记——其他常用通用字符集及其替换
有了这些符号,我们就可以简化正则表达式的编写了。试一试:echo "abc1239cd_@#" | grep -E --color '\d'echo "abc1239cd_@#" | grep --color '\d'这里我们要再引入一条命令——egrep。egrep也可以达到我们想要的效果:echo "abc1239cd_@#" | egrep --color '\d'...
2018-06-13 22:19:36 1047
原创 Shell脚本学习笔记——正则表达式
正则在线转换工具正则表达式基本是与语言无关的,只要学会正则表达式,那么基本上可以结合语言/工具与正则进行文本处理。我们这里统一与grep来进行验证。grep是一款Linux下按行匹配文本的工具。通常是Linux下处理文本的第一步,带有很多有用的选项。 -E:使用扩展正则匹配。 --color:将匹配到的内容进行语法高亮。字符类echo "hello world" | grep -E -...
2018-06-12 23:43:48 378
原创 Shell脚本学习笔记——正则表达式概念、应用场景及基本要素
概念正则表达式又称规则表达式,是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。正则表达式目前被集成到了各种文本编辑器/文本处理工具当中。应用场景验证:表单提交时,进行用户名密码验证。查找:从大量信息中快速提取指定内容。如:在一批URL中,查找指定URL。替换:将指定格式的文本,进行正则匹配查找,找到之后进行特定替换。如:vim文...
2018-06-12 20:19:16 303
原创 Shell脚本学习笔记——练习题(2)
利用Shell编写进度条传入至少三个数字参数到脚本,并计算出最大、最小、平均值。需要判断传入的数字是否足够,若不足够则输出警告信息。平均值保留两位小数。有一列数字如下:写出第100次出现的数字是多少这道题就是斐波那契数列的问题,我们的解题思路就是利用数组下标来解决问题。由于斐波那契增长极快,所以如果采用普通的(( )) 或者 let 的形式来计算,就会出现溢出的问题,得到错误的答案。所以在这里我们...
2018-06-11 23:53:09 370
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人