51Testing软件测试网

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我参与的随笔

留言簿(3)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案

  • 2021年6月 (1)
  • 2021年3月 (1)
  • 2020年9月 (1)
  • 2020年3月 (1)
  • 2020年1月 (2)
  • 2019年12月 (3)
  • 2019年11月 (5)
  • 2019年10月 (1)
  • 2019年9月 (2)
  • 2019年8月 (14)
  • 2019年7月 (20)
  • 2019年6月 (15)
  • 2019年5月 (12)
  • 2019年4月 (19)
  • 2019年3月 (20)
  • 2019年2月 (9)
  • 2019年1月 (16)
  • 2018年12月 (17)
  • 2018年11月 (21)
  • 2018年10月 (16)
  • 2018年9月 (20)
  • 2018年8月 (22)
  • 2018年7月 (3)
  • 2018年6月 (1)
  • 2018年5月 (7)
  • 2018年4月 (1)
  • 2018年3月 (3)
  • 2018年2月 (6)
  • 2018年1月 (2)
  • 2017年9月 (8)
  • 2017年8月 (28)
  • 2017年7月 (3)
  • 2016年11月 (1)
  • 2016年6月 (1)
  • 2016年4月 (1)
  • 2016年2月 (2)
  • 2015年7月 (1)
  • 2015年5月 (1)
  • 2015年4月 (2)
  • 2015年3月 (1)
  • 2015年2月 (2)
  • 2015年1月 (6)
  • 2014年12月 (3)
  • 2014年11月 (3)
  • 2014年10月 (3)
  • 2014年9月 (2)
  • 2014年8月 (8)
  • 2014年7月 (16)
  • 2013年12月 (5)
  • 2013年11月 (1)
  • 2013年10月 (3)
  • 2013年9月 (2)
  • 2013年8月 (2)
  • 2013年7月 (3)
  • 2013年5月 (1)
  • 2013年4月 (2)
  • 2013年3月 (2)
  • 2013年2月 (3)
  • 2013年1月 (4)
  • 2012年12月 (4)
  • 2012年11月 (4)
  • 2012年10月 (3)
  • 2012年9月 (4)
  • 2012年8月 (3)
  • 2012年7月 (4)
  • 2012年6月 (2)
  • 2012年5月 (2)
  • 2012年4月 (1)
  • 2012年3月 (2)
  • 2012年2月 (2)
  • 2012年1月 (1)
  • 2011年12月 (3)
  • 2011年11月 (2)
  • 2011年10月 (1)
  • 2011年9月 (4)
  • 2011年8月 (3)
  • 2011年7月 (2)
  • 2011年6月 (4)
  • 2011年5月 (4)
  • 2011年4月 (2)
  • 2011年3月 (4)
  • 2011年2月 (4)
  • 2011年1月 (7)
  • 2010年12月 (7)
  • 2010年11月 (5)
  • 2010年10月 (4)
  • 2010年9月 (7)
  • 2010年8月 (7)
  • 2010年7月 (3)
  • 2010年6月 (3)
  • 2010年5月 (4)
  • 2010年4月 (4)
  • 2010年3月 (5)
  • 2010年2月 (3)
  • 2010年1月 (4)
  • 2009年12月 (3)
  • 2009年11月 (3)
  • 2009年10月 (1)
  • 2009年9月 (3)
  • 2009年8月 (2)
  • 2009年7月 (3)
  • 2009年6月 (1)
  • 2009年5月 (2)
  • 2009年4月 (4)
  • 2009年3月 (5)
  • 2009年1月 (1)
  • 2008年11月 (2)
  • 2008年7月 (5)
  • 2008年6月 (4)

文章分类

  • 行业资讯(45) (rss)
  • 软件业务知识(43) (rss)
  • 软件开发知识(33) (rss)
  • 软件测试工具(39) (rss)
  • 软件测试技术(157) (rss)
  • 软件测试管理(40) (rss)
  • 软件测试职业发展(57) (rss)

51testing软件测试网

搜索

  •  

最新评论

  • 1. re: 淘宝后台技术大揭秘,不看这篇你双十一要损失几个亿!
  • 关注官方公众号“Atstudy网校”,点击中间菜单栏“双11”,领取双十一技术内幕资料。
  • --51testing
  • 2. re: 软件测试流程的一点感悟
  • 提交缺陷时只需要描述现象即可,过多的分析可能会误导开发
  • --凡客诚品
  • 3. re: 软件测试流程的一点感悟
  • 阿达宿建德江阿斯顿
  • --凡客礼品卡
  • 4. re: 手机软件测试的经验总结
  • 很好啊~不错
  • --乐蜂网
  • 5. re: 手机软件测试的经验总结
  • 很好啊~
  • --罗莱家纺

阅读排行榜

  • 1. 软件测试流程的一点感悟(1091)
  • 2. 5年经验之谈:月薪3000到30000,测试工程师的变“行”记!(940)
  • 3. 测试自动化及软件测试工具的比较(858)
  • 4. 银行线上信贷系统如何做好接口测试?手把手教你接口工具Postman(825)
  • 5. 软件为什么要做异常测试?测试员必知的22个测试点总结!(807)

评论排行榜

  • 1. 软件测试流程的一点感悟(4)
  • 2. 软件测试的原则和经验 (4)
  • 3. 嵌入式软件测试技巧(2)
  • 4. 手机软件测试的经验总结 (2)
  • 5. 常用软件测试工具的分析与比较(1)

Powered by: 博客园
模板提供:沪江博客
IT博客 | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

学会Python+Selenium,分分钟搭建Web自动化框架!

用python+selenium实现UI自动化测试,要有一些HTML和xpth的基础,当然python基础一定是必须要会的。笔者建议花点时间了解下相关基础知识,不至于后面发懵。

一、什么是selenium?

selenium是个强大的工具集。支持快速开发测试自动化,支持在多种浏览器平台上执行测试。支持多开发语言,如:Python、Java、ruby、C#等,本次选择Python3作为开发语言。

二、用python做测试的优点

学习难度小,开发周期短。对目前国内大多数测试人员来说,编码经验不足,python是个很好的入门语言。胶水语言,能与C++, Java, COM, and .NET,Object-C 整合。

测试部门要做单元测试,接口测试,因为人员比例的关系,不可能让测试人员同时掌握多门语言,python可以对C/C++, Java, Object-C进行接口封装后,实现单元测试。语法简约,清晰,减少后期维护的难度。


三、自动化测试框架

一个典型的自动化测试框架一般包括用例管理模块、自动化执行控制器、报表生成模块和日志模块等,这些模块之间不是相互孤立的,而是相辅相成的。


下面来介绍下每个模块的逻辑单元:

用例管理模块

用例管理模块包括用例的添加、修改、删除等操作单元,这些单元也会涉及到用例书写的模式,测试数据的管理、可复用库等

自动化执行控制器

控制器是自动化用例执行的组织模块,主要负责以什么方式去执行用例。比较典型的控制器有用户图形界面(GUI)和“commandline+文件”两种。

报表生成模块

报表生成模块主要负责执行完用例以后生成报表,报表一般以HTML格式居多,信息主要包括用例的执行情况及相应的总结报告。另外还可以添加发送邮件功能。

日志模块

日志模块主要用来记录用例的执行情况,以便于更高效的调查用例失败信息及追踪用例执行情况。

四、自动化框架的设计与实现

方案设计

1、编程代码选择 python3

2、工具selenium + 单元测试框架 unittest

3、编译器: IDE/pycharm

结构设计


cases:

根据功能划分用例管理


用例实现

com



config

edata: 环境配置模块

env.json 、enviroment.yaml 实现城市选择及SIT、UAT环境切换

sdata: 数据配置

各类数据json文件、银行数据、产品信息、个人信息等

elements: 元素定义

locator.py 元素定义、menu 、into_a_management.yaml 等


lib

第三方模块引用, 版本管理


report

管理日志报告

report.xlsx 自动化执行结果生成excel报表


report.xlsx


index.html


需要改进的模块

对于现有实现的测试框架,已经可以满足web对象的自动化需求,但还是有些可以改进提高的地方,比如:

针对部分测试用例是否可以尝试数据驱动

添加屏幕截图功能

封装selenium中By库中的函数,以便更高效的定位页面元素等

结合业界优秀的自动化框架和实践持续改进

五、总结

基于selenium实现的web自动化框架不仅轻量级而且灵活,可以快速的开发自动化测试用例。结合上面的框架设计思路,希望对大家以后的web自动化框架的设计和实现有所帮助。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-12-13 17:55 51testing 阅读(74) | 评论 (0) | 编辑 收藏
 
程序员必知的Java基础:5条命名规范和8种数据类型归纳

一、Java命名规范

任何一种语言都有一套针对于语言自身的命名的规范,java也不例外。接下来,我就列举一下java对命名的规范。

下面重点来了,准备好了嘛?

1、代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

反例:_name/$Object/name_/name$/Object$

2、代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意:即使纯拼音命名方式也要避免采用。正例:alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。

3、类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形列外:DO / BO / DTO / VO / AO

正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal

反例:marcoPolo / UserDo / XMLService / TCPUDPDeal

4、方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。

正例:localValue / getHttpMessage() / inputUserId

5、常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不需要嫌名字长。

正例:MAX_STOCK_COUNT

反例:MAX_COUNT


二、Java数据类型

Java中的数据类型,分为引用类型和基本数据类型。


基本类型又分为8种,今天为大家介绍这8种基本数据类型:

整型:byte,short,int,long

浮点型:float,double

字符型:char

Boolean型:boolean

基本数据类型

整数类型:

(byte,short,int,long)


1.使用时,只要在数值范围内,符合规则,其他并无大碍。

值得思考的是,合理使用数据类型,可以节约内存空间。

2.不同进制下,数字的表示方法。

10进制:50,100,-10

16进制:0x15,0X15均可

字符类型(char):

特殊意义符号表


Char占2个字节 16位

使用的时候注意,使用单引号时,

例如‘A’,则表示一个字符A

使用双引号时,

例如“A”,则表示只有一个A的字符串

布尔型(boolean):

Boolean占内存1位,也就是1/8个字符

通常用以做判断用途,

数值分别只有0和1,

也可以用false和true表示。

应注意的是,

false和null是不一样的。

浮点类型:

(float,double)


1.浮点型通常用以表示小数

float可以精确到小数点后7位

double可精确到小数点后14位

2.表示float的常量后面要加“f”

例如:float a=11.2f

否则会出错。

注意:在数学中0到1有无数个浮点数;而计算机是离散的,所以表示的时候有误差,

计算机用精度(小数点后几位来表示正确),比较浮点数时a==0.1是不合适的,

应该a-0.1==0;如果a是0.1,则即使有误差 a-0.1==0因为a和0.1都被表示为一个有误差的计算机二进制

1、类型转换

1)自动转换:byte-->short-->int-->long-->float-->double

注意:小可转大,大转小会失去精度

2)String转换成int或者double

int/Integer num = Integer.parseInt(String str);

double/Double num = Double.parseDouble(String str);

2、如何将整数 int 转换成字串 String

int a=9;

1) String s = String.valueOf(a);

这个方法是静态的,直接通过String调用,可以说是完美,只是平时不习惯这样写而已,

这样的实现避免了前面两个的不足和缺点。首先来看看他内部的实现机制:

public static String valueOf(Object obj){

return (obj==null) ? "null" : obj.toString()

};

在内部就是做了为空的判断的,所以就不会报出空指针异常。  

从上面的源码可以很清晰的看出null值不用担心的理由。但是,这也恰恰给了我们隐患。

我们应当注意到,当object为null 时,String.valueOf(object)的值是字符串”null”,

而不是null!!!在使用过程中切记要注意。

2) String s = a.toString();

在这种使用方法中,因为java.lang.Object类里已有public方法.toString(),

所以对任何严格意义上的java对象都可以调用此方法。但在使用时要注意,

必须保证object不是null值,否则将抛出NullPointerException异常。采用这种方法时,

通常派生类会覆盖Object里的toString()方法。

3、double类型数据做加和操作时会丢失精度问题处理

/加法运算/

public static double add(double m1, double m2) {

BigDecimal p1 = new BigDecimal(Double.toString(m1));

BigDecimal p2 = new BigDecimal(Double.toString(m2));

return p1.add(p2).doubleValue();

}

/减法运算/

public static double sub(double m1, double m2) {

BigDecimal p1 = new BigDecimal(Double.toString(m1));

BigDecimal p2 = new BigDecimal(Double.toString(m2));

return p1.subtract(p2).doubleValue();

}

/乘法运算/

public static double mul(double m1, double m2) {

BigDecimal p1 = new BigDecimal(Double.toString(m1));

BigDecimal p2 = new BigDecimal(Double.toString(m2));

return p1.multiply(p2).doubleValue();

}

4、保留小数点后两位方法

方法一:

DecimalFormat df = new DecimalFormat("######0.00");

double d1 = 3.23456

df.format(d1);

#.00 表示两位小数 #.0000四位小数 以此类推...

方法二:

double d = 3.1415926;

String result = String.format("%.2f",d);

%s 字符串类型

%c 字符类型

%b 布尔类型

%d 整数类型(十进制)

%x 整数类型(十六进制)

%o 整数类型(八进制)

%f 浮点类型

%a 十六进制浮点类型

%e 指数类型

%g 通用浮点类型(f和e类型中较短的)

%h 散列码

%% 百分比类型

%n 换行符

%tx 日期与时间类型(x代表不同的日期与时间转换符

%.2f %. 表示 小数点前任意位数

2表示两位小数 格式后的结果为f 表示浮点型

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-12-12 17:47 51testing 阅读(107) | 评论 (0) | 编辑 收藏
 
Linux下如何安装、压缩、解压软件包?常用命令汇总!

对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕。别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rar。

可是Linux就不同了,它有.gz、.tar.gz、tgz、bz2、.Z、.tar等众多的压缩文件名,此外windows下的.zip和.rar也可以在Linux下使用,不过在Linux使用.zip和.rar的人就太少了。下面我就来对这些常见的压缩文件进行一番小结,希望你下次遇到这些文件时不至于被搞晕.


Linux中打包和压缩的区别:

在具体总结各类压缩文件之前呢,首先要弄清两个概念:打包和压缩。

打包是指将一大堆文件或目录什么的变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

为什么要区分这两个概念呢?其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你就得先借助另它的工具将这一大堆文件先打成一个包,然后再就原来的压缩程序进行压缩。

linux常用解压缩命令:

我们常见的文件压缩格式windows下有zip和rar,rar在windows系统下成为了事实的标准。但是在Linux下常见的有tar.gz tar.bz2 tar.xz格式。

Linux下实际上将文件归档和文件压缩分开,利用tar将数据文件归档,借助于其他压缩工具压缩。其中以tar.gz 最为常见。

Linux下不常见的压缩格式有tar.lz tar.lzma等。

遵循于windows下的DOS系统的文件命名方式和长度限制Linux下的压缩格式有如下的表现形式:

Long Short

.tar.bz2 .tb2, .tbz, .tbz2

.tar.gz .tgz

.tar.lz

.tar.lzma .tlz

.tar.xz .txz

.tar.Z .tZ

.zip格式

解压:unzip 文件名.zip

压缩:zip 文件名.zip 目录名

.tar格式

压缩:tar cvf 文件名.tar 文件名

解压:tar xvf 文件名.tar

.tar.gz格式

解压:tar zxvf 文件名.tar.gz

压缩:tar zcvf 文件名.tar.gz 文件名

.tar.bz2格式

解压:tar jxvf 文件名.tar.bz2

压缩:tar jcvf 文件名.tar.bz2 目录名

.bz2格式

解压:bzip2 -d 文件名.bz2

压缩: bzip2 -z 文件名

linux下软件安装

如果你的Linux系统带有安装程序,最好用系统自带的安装程序来安装。比如 SuSE的YaST2就带有安装程序,在KDE环境下只要是rpm,就可以在Konqueror里面点击再“Install with YaST2”,这样做的好处是YaST2会给你提示包的详细信息,自动检查信赖关系,而且以后可以方便地在YaST2里面卸载软件包。SuSE的Red- Carpet也提供了安装功能,也不错。

另一种方式是使用rpm命令,需要打开终端,切换到xxx.rpm所在目录,执行:

rpm -ivh xxx.rpm

如果需要还可以带上其他参数。不过在SuSE里面,用rpm命令安装的软件包,在YaST2的控制面板里面显示为“锁定状态”,我不知道这是什么意思,不过软件包是可用的,也可以在YaST2里面卸载。

2.1、rpm安装:Redhat Linux提供的一种包封装格式。

(1) 安装: rpm –ivh 软件包名

如:rpm -ivh software.rpm

(2) 卸载: rpm –e 软件名

如:rpm -e software

rpm参数说明

-i 安装软件

-t 测试安装,不是真的安装

-p 显示安装进度

-f 忽略任何错误

-U 升级安装

-v 打印安装进度信息

2.2、编译安装

示例步骤:

(1) 进入/usr/local/,并创建jdk目录。

(2) 将下载好的源码包解压到该目录: tar -zxvf jdk8.tar.gz。

(2) 执行configure,生成Makefile文件: ./configure --prefix=/usr/local/jdk/

说明:

–prefix参数指定软件安装目录。当执行make install命令时,会将软件安装在此路径中。

(3) 执行make,从Makefile中读取指令,编译源码: make clean; make

(4) make install,二进制文件会被安装到先前configure prefix参数设置的路径中去。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-12-11 17:20 51testing 阅读(112) | 评论 (0) | 编辑 收藏
 
Python书单丨程序员都在读的15本书,值得一看!

互联网的发展带动了各行各业信息化的趋势,一大批高新企业如雨后春笋般出现在大众的视野中。于是,不同类型的软件项目应运而生。在这些琳琅满目的项目中,有企业管理、电商平台、财务报表、金融银行、医疗器械、智慧城市和大数据分析等类型。Python凭借其灵活性,在自动化运维方面已经被广泛使用,能够大大提高运维效率,服务器集群的规模越大,优势越明显。


Python 是军刀型的开源工具,被广泛应用于Web 开发、爬虫、数据清洗、自然语言处理、机器学习和人工智能等方面,而且Python 的语法简洁易读,这让许多编程入门者不再望而却步,因此Python 在最近几年非常受欢迎,各行各业的技术人员都开始使用Python。

Python控们,还在为如何开始学Python而不知从何下手吗?或者您已经积累了一定的经验,像打游戏一样,不知从哪升级?再或者您有哪些编程思路没有打开?这里通通有,各种玩家必看。

今天带来这份Python书单,从入门进阶到开发实战,总有一本适合现阶段的你来学习!

1、《Python编程快速上手》


这本书对于那些想要开始学习和使用Python的人来说,绝对是不二之选,本书根据Creative Commons共享许可协议发布,除此之外,作者还为本书创建了一个网站。如果你喜欢一个视频格式,你还可以到YouTube上听AIbert讲解。

2、《Effective Python 中文版》


本书将帮助你利用Python编写出功能强大、高校、可维护且性能良好的代码,Brett Slatkin汇集了来自权威专家的59个最佳的Python实践、技巧和实际代码示例

3、《流畅的Python》


本书由奋战在Python开发一线近20年的Luciano Ramalho执笔,从语言设计层面剖析编程细节,兼顾Python 3和Python 2,告诉你Python中不亲自动手实践就无法理解的语言陷阱成因和解决之道,并教你写出风格地道的Python代码。

4、《Hello Web App》


这是一个系列,向你展示了如何构建第一个Web应用程序,而且是使用Django(最近更新为Django 2.0)。它非常适合初学者,还有有一本专门针对中级程序员的书,而关于设计的系列中的几本也非常好。这个系列涵盖了纸质书、28个视频和电子书。

5、《Python游戏编程快速上手》


学习编程学习动力是最重要的因素之一,有趣的编程书籍能让你一直保持学习动力,本书通过一个个小巧、有趣的游戏来教会读者Python编程,十分适合不同年龄和层次的Python初学者,让你在学习Python的同时还不缺趣味性。

6、《Python学习手册(第4版)》


本书是易于掌握和自学的教程,根据作者Python专家Mark Lutz的著名培训课程编写而成。每一章都包含关于Python语言的关键内容的独立的一课,并且包含了一个独特的“练习题”部分,其中带有实际的练习和测试,以便你可以练习新的技能并随着学习而测试自己的理解。

7、《Learning Python》


适合第一次接触Python的程序员,不适合第一次使用Python学编程的读者,这本书提供了一种学习Python最简单的途径,是读者能够轻松地学会该语言,这对初学者来说是个不错的起点

8、《Learn to Program with Python 3》


本书针对Python 3进行了全面更新,包含代码和示例,本书通过循序渐进的方法解释Python编程,让你可以轻松进入软件开发领域。

9、《Programming Arcade Games with Python and Pygame》


本书向你展示了如何使用Python和PyGame框架构建出既酷又有趣的街机游戏,学习游戏编程是学习Python的一种好方法,也是最有趣的方式,你将看到你写的代码在屏幕上生动的呈现,而且本书还涵盖了重要的基础知识。

10、《Python 101》


这本书非常适合新手,内容非常接地气,相信看完本书之后,你会拥有一个十分扎实的Python基础。

11、《Python 3 Object-oriented Programming》


当你学会了初中级的Python技能之后,本书就是讲你的技能水平提升到另一个水平的书籍,书中涵盖了更多的面向对象编程的知识

12、《Python Cookbook 中文版,第 3 版》


本书面向专业的Python程序员,介绍了Python应用在各个领域中的一些使用技巧和方法,覆盖了Python应用中的很多常见问题,并提出了通用的解决方案。书中包含了大量实用的编程技巧和示例代码,并在Python 3.3环境下进行了测试,可以很方便地应用到实际项目中去。

13、《Python Tricks: The Book》


本书向读者介绍了一些有趣的,但经常被忽略的语言语法领域,以及使用官方Python解释器CPython有哪些利弊。通过这样的学习,程序员就会知道在一些极端的情况下如何高效的优化代码。

14、《Python高手之路》


这不是一本常规意义上Python的入门书,它完全从实战的角度出发,对构建一个完整的Python应用所需掌握的知识进行了系统而完整的介绍。

15、《The Quick Python Book》


本书的作者Naomi长期以来一直是Python社区的一员,本书已经第三版,这本书专注于Python3的面向对象的编程,前面章节注重基础知识的介绍,后面则把重心放在了数据结构和设计模式上。

总结:

随着机器学习的兴起,Python 逐步成为了「最受欢迎」的语言。它简单易用、逻辑明确并拥有海量的扩展包,因此其不仅成为机器学习与数据科学的首选语言,同时在网页、数据爬取可科学研究等方面成为不二选择。此外,很多入门级的机器学习开发者都是跟随大流选择 Python。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-12-10 17:51 51testing 阅读(148) | 评论 (0) | 编辑 收藏
 
如何学习性能测试?LoadRunner小技巧集锦

LoadRunner是一款非常主流、常用的性能测试工具。我们在使用它进行测试的过程中经常会遇到一些错误,这些错误可能是由于设置不当引起,也有可能是选项设置引起,更有可能是测试执行中的一些细节没有注意而引起的,在此做一个性能测试系列总结。


一、性能指标

在做性能测试之前,简单说下性能指标:

响应时间

针对页面操作,响应时间小于2秒,用户会感觉系统较快较满意;响应时间在2~5秒,用户可以接受,但对速度有些不满;响应时间超过5秒,用户将无法接受。

作为优秀的项目当然越快越好,我们在做压测的时候,一般希望响应时间在1秒以内, 针对系统内部调用的接口响应时间更要快,具体情况视具体接口而定。

吞吐量

通常需要结合业务部门的市场目标而定。

服务器资源占用

CPU占用率、内存使用率不能过高;Cache命中率不能过低。

二、性能测试流程

制定性能测试目标-->选择性能测试工具-->设计性能测试-->执行性能测试脚本-->监控分析系统-->性能调优

1、目标:

如,系统需满足500个用户在线、20个用户并发操作发帖的情况下,发帖响应时间不超过2秒,系统资源使用率不超过30%。

2、选择性能测试工具:

可选择LR、Locust、jmeter等主流测试工具,下面主要介绍LR相关。

3、性能测试准备:

测试脚本开发、负载的生成规则及监控方式、测试环境的搭建。

性能测试准备过程中需要注意的点:

确认压测前SQL Review已通过;

确认压测环境已成功搭建,压测服务器上单独部署一套程序代码;

明确域名及需要绑定的host;

搞清楚需要压测的业务及场景(也可以理解为测试用例);

清楚输入参数及服务端返回信息;

明确需要参数化的输入值,明确“请求成功的服务端返回码”;

4、负载过程、负载后对数据进行分析,这个分析需要众多专家共同协作,找出数据背后的问题,确定性能瓶颈。

5、确定瓶颈后,进行软硬件调优,调优完成重复之前的步骤。

三、Loadunner主要特色

非常优秀的性能测试工具

很容易使用

3、压力测试表现出色,容易找到性能瓶颈(诸如检测:线程异常、内存异常、连接池异常、对象泄漏、数据库及应用系统的性能表现);

几个亮点:

1. 事务:用于事务计时;

2. 集合点:在并发用户发出请求前设置集合点,待并发用户都到达集合点后再发出并发请求。

3. IP欺骗:模拟不同的IP地址向应用系统发出业务请求;

4. 参数化:把脚本数据参数化后,变成千万个不同请求数据的脚本,确保唯一性;

5. 多场景类型:同一个脚本,可以设置不同的场景类型向应用系统发出业务请求;

6. 多机:多机联合产生负载,确保客户端自身稳定性;

7. 监控:支持对服务器资源监视;

8. 性能分析:图、表分析测试结果,非常直观

四、LoadRunner常见问题

1、LR脚本为空的解决办法

①去掉ie设置中的第三方支持取消掉

②在系统属性-高级-性能-数据执行保护中,添加loadrunner安装目录中的vugen.exe文件。

遇到flight界面为空的解决的可能方法:

①如果安装了IE以外的浏览器,并且IE不是默认浏览器,则无法生成录制脚本

②如果录制脚本时IE不能 打开,则需要将浏览器的IE工具高级选项中,将“启用第三方浏览器扩展”的勾选去掉

③lr自带的webtours系统,如果点击Flights选项,出现空白页面,请检查本机oracle的PERL5LIB环境变量,我的解决办法是使用webtours的时候删除掉该变量的内容,使用oracle的时候再填上该变量内容为什么该变量会影响webtours的使用,原因不明。

2、LoadRunner录制脚本时为什么不弹出IE浏览器?

当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。

启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启动)”的勾选,然后再次运行VuGen即可解决问题

提示:通常安装Firefox等浏览器后,都会勾选上面得选项,导致不能正常录制。因此建议运行LoadRunner得主机上保持一个干净的测试环境。

3、HTML-based script与URL-based script的脚本有什么区别?

使用“HTML-based script”的模式录制脚本,VuGen为用户的每个HTML操作生成单独的步骤,这种脚本看上去比较直观;使用 “URL-based script”模式录制脚本时,VuGen可以捕获所有作为用户操作结果而发送到服务器的HTTP请求,然后为用户的每个请求分别生成对应方法。

通常,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服 务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使 用了HTTPS安全协议,这时使用“URL-based script”模式进行录制。

4、运行时的Pacing设置主要影响什么?

Pacing主要用来设置重复迭代脚本的间隔时间。共有三种方法:上次迭代结束后立刻开始、上次迭代结束后等待固定时间、按固定或随机的时间间隔开始执行新的迭代。

根据实际需要设置迭代即可。通常,没有时间间隔会产生更大的压力。

5、运行时设置Log标签中,如果没有勾选“Enable logging”,则手工消息可以发送吗?

Enable logging选项仅影响自动日志记录和通过lr_log_message发送的消息。即使没有勾选,虚拟用户脚本中如果使用lr_message、lr_output_message、lr_error_message,仍然会记录其发出的消息。

6、LoadRunner回放脚本时,在浏览器显示的中文是乱码

解决办法(1):

首先设置Run-Time Settings – Browser –Browser Emulation – User-Agent

然后设置IE:

查看-编码-钩上“自动选择”和Unicode(UTF-8)。

解决办法(2):

使用lr_convert_string_encoding函数来转换编码。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-12-07 17:25 51testing 阅读(114) | 评论 (0) | 编辑 收藏
 
如何对手机http进行抓包?Fiddler工具超好用

在做手机或移动端APP的接口测试时,需要从开发人员那里获取接口文档,接口文档应该包括完整的功能接口、接口请求方式、接口请求URL、接口请求参数、接口返回参数。如果当前项目没有接口文档,则可以使用fiddler对APP进行抓包确认。

在手机上对APP进行操作,然后在Fiddler中可以抓取对应的网络交互信息(一个功能中可能设计多个接口的交互)。在抓取的信息中可以看到接口请求方式、接口请求URL、接口请求参数、接口返回参数。


下面是如何使用fiddler对手机APP进行抓包:

1、fiddler手机抓包原理

在本机开启了一个http的代理服务器,然后它会转发所有的http请求和响应。Fiddler 是以代理web 服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。网络请求走fiddler,fiddler从中拦截数据,由于fiddler充当中间人的角色,所以可以解密https。

因此,它比一般的firebug或者是chrome自带的抓包工具要好用的多。不仅如此,它还可以支持请求重放等一些高级功能。它还可以支持对手机应用进行http抓包的。

下面就是手机抓包:

浏览器的代理设置默认是关着的,win7谷歌浏览器“设置--高级--系统--打开代理服务器--局域网设置--代理服务器”勾上。代理开关为开:可以抓到包,代理开关为关:抓不到包。

2、前提条件:

1).电脑需要安装Fiddler

2).测试手机需要支持Wifi

3).测试手机与电脑需要同一网络

4).所测APP需支持代理

3、Fiddler基本用法

界面布局:


打开Fiddler后,在浏览器中做任意请求,即可被Fiddler记录,包括返回码,请求协议,主机名,请求地址等等,

可在请求区域查看详细的请求信息,在响应区域查看详细的返回结果。

如下图


4、Fiddler对手机抓包流程

第一步:对Fiddler设置为允许远程连接。

找到Tools->Fiddler Options->Connections,将Allow remote computer to connect 选中,点击OK,然后重启Fiddler。

如下图:


第二步:修改手机连接网络为代理模式。

打开正在连接的wifi,然后找到:

1、修改网络(一般长按就会出现)


2、点击显示高级选项-->代理-->手动


代理服务器主机名设为电脑本地IP地址,端口设为:8888

如下图


补充:查看本地IP:打开cmd,输入ipconfig回车,然后查找IPv4地址

如下图:


第三步:在Fiddler中验证。

在手机中用浏览器或者其他APP,做网络请求,即可在Fiddler中记录,

例如:在手机打开浏览器,用百度搜索,这时在Fiddler中就会记录下请求。  

如下图:


还可查看不同格式的


5、Fiddler工具的优缺点

以上就是我在测试移动端APP时使用Fiddler进行抓包的常用方法和遇到的问题,下面再来说一说Fiddler的优缺点,以便大家能够在第一时间判断哪些情况下可以使用Fiddler而哪些情况是Fiddler无能为力的。

Fiddler之所能

查看Web流量及其顺序

查看每一对Request/Response的Header,Cookies,Cache,正文等信息及请求时间等

保存已经产生的请求序列用于后续查看或回放

解密HTTPS并查看其内容

修改Request/Response以满足特殊的测试或Hack需求

6、通过FiddlerScript和FiddlerExtention可以完成强大的可编程网络功能

Fiddler之所不能

Fiddler只能用于HTTP/HTTPS/FTP请求的debug,而对那些直接使用TCP协议,或者使用SMTP, POP3, Telnet, IRC等协议的数据包就无能为例了

Fiddler只能检测到通过Fiddler代理的流量

3、Fiddler所有的请求都是直接存储在内存中的,因此在处理很大的包时速度会比较慢

Fiddler是一个非常强力的HTTP协议调试工具,无论是用于网页测试还是客户端API测试都是一把利器,掌握好这个工具一定能让你在以后的工作中事半功倍。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-12-06 17:31 51testing 阅读(137) | 评论 (0) | 编辑 收藏
 
2019测试员必备武器:世界排名前5的自动化测试工具

中国的软件测试技术研究主要是随着软件工程的研究而逐步发展起来的,近年来随着我国软件产业的蓬勃发展以及对软件质量的重视,带动了软件测试行业的快速发展,已逐步与国际先进水平拉近差距,软件测试在国内正在逐步成为一个新兴的产业。

51Testing根据07-18年的技术趋势和热点,进行了大量的市场调查,力求及时准确的反映07-18年中国软件测试行业的发展变化,帮助测试人员了解2019年软件测试从业人员的发展,有针对性地提高自身的软件测试技术水平和管理水平。


下面根据历年调查总结了最顶尖的自动化测试工具和框架,这些工具和框架可以帮助组织更好地定位自己,跟上软件测试的趋势。这份清单包含了开源和商业的自动化测试解决方案。


1.Selenium

Selenium是一个浏览器自动化操作框架。Selenium主要由三种工具组成。

第一个工具SeleniumIDE,是Firefox的扩展插件,支持用户录制和回放测试。录制/回放模式存在局限性,对许多用户来说并不适合,因此第二个工具——Selenium WebDriver提供了各种语言环境的API来支持更多控制权和编写符合标准软件开发实践的应用程序。最后一个工具——SeleniumGrid帮助工程师使用Selenium API控制分布在一系列机器上的浏览器实例,支持并发运行更多测试。在项目内部,它们分别被称为“IDE”、“WebDriver”和“Grid”。

Selenium 支持多系统环境(Windows,Mac,Linux)以及多种浏览器(Chrome,FireFox,IE 以及无头浏览器(没有界面))。它的脚本可以由各种各样的编程语言编写,比如 Java,Groovy,Python,C#,PHP,Ruby 以及 Perl。

证书:开源

2.Katalon Studio

Katalon Studio是一个非常有力的自动化测试解决方案,它其实是构建在Selenium和Appium框架上的,所以它可以同时测试Web系统及手机APP应用。(注:新版本也已经支持对接口的测试)

这个工具支持不同编程水平的工程师使用。不会编程的也可以使用它轻松的开始一个项目的自动化(比如使用Object Spy来录制生成测试脚本),会编程的和高级自动化测试工程师也可以通过它非常快速的创建新库以及维护代码,它可以帮助他们节省很多时间。

Katalon Studio可以与CI/CD(持续集成/持续发布)流程集成,还可以与测试领域非常常见的工具集成,比如qTest,JIRA,Jenkins和Git. 它还提供了一个非常棒的功能叫Katalon Analytics,这个功能可以将测试报告用各种图表来展现,比如metrics, charts, and graphs.

PS:这个工具听起来真不错,值得研究研究。

证书:免费

3.UFT

Unified Functional Testing(UFT)是一个知名的商业测试工具。(注:更名前叫QTP)它可以测试非常多的应用,比如接口API,Web services,桌面程序,Web系统,手机APP等。这个工具具有高级的基于图像的识别功能,也可以重用测试组件。

UFT使用Visual Basic脚本编辑器来注册测试过程和对象控制。UFT与Mercury Business Process Testing和Mercury Quality Center集成。它通过与诸如Jenkins等CI工具的集成来支持CI。

证书:商业

4.Watir

Watir 是一个基于 Ruby 库的开源的网页自动化测试工具。Watir 支持跨浏览器测试,包括 Firefox,Opera,无头浏览器和 IE。它同样支持数据驱动测试和集成 BBD 工具,比如 RSpec,Cucumber 和 Test/Unit。

证书:开源

5.IBM Rational Functional Tester

IBM RFT是一个数据驱动测试的框架可以进行功能测试以及回归测试。它可以测试的应用更广泛,比如:.net, Java, SAP, Flex和Ajax。

RTF支持Visual Basic、.net和Java做为测试脚本语言。

RFT可以和IBM公司的管理整个软件生命周期的软件进行良好的集成,比如IBM Rational Team Concert以及Rational Quality Manager。

(注:Rational Functional Tester 功能强大,容易架设框架、容易扩展,但对用户的要也比较高。)

证书:商业

6.TestComplete

TestComplete是由SmartBear开发的强大的商业的网页、移动和桌面测试工具。TestComplete支持各种脚本语言如 JavaScript,VB,Python 和 C++ 脚本。和Katalon Studio一样,测试员可以用TestComplete部署关键字驱动和数据驱动。这个工具同样提供了容易使用的记录和回放功能。

像UTF,TestComplete 的 GUI 对象识别能力可以自动检测和更新UI对象,以便当AUT改变时减少维护测试脚本的工作。它同样可以在CI过程中集成Jenkins。

证书:商业

7.TestPlant eggPlant

一个基于图像的自动化功能测试工具,可以让测试员像终端用户一样与 AUT 交互。TestPlant eggPlant 和传统的测试工具在方式上完全不同:建模用户的视图而不是测试员经常看到的测试脚本视图。这让测试员只需要学习少量的编程技巧就能直观地部署自动化测试。这个工具支持各种平台如网页,移动应用和 POS 系统。它同样提供实验室管理和 CI 集成。

证书:商业

8.Tricentis Tosca

Tricentis Tosca是一个基于模型的测试自动化工具,它为持续测试提供了相当广泛的特性,包括dashboards、分析和集成,支持敏捷和DevOps方法。

“Tricentis Tosca”帮助用户优化测试资产的可重用性。与许多其他的测试自动化工具一样,它支持广泛的技术和应用程序,如web、mobile和API。Tosca还具有集成管理、风险分析和分布式执行的特性。

证书:商业

9.Ranorex

Ranorex是一个相当全面的商业自动化工具,用于web、移动和桌面测试。该工具具有高级的GUI识别、可重复使用测试脚本和记录/回放功能。Codeless测试创建也是一个非常有用的特性,它允许新的自动化测试人员学习并将测试自动化应用到他们的项目中。

该工具支持web应用测试的Selenium集成。测试人员可以在使用Selenium grid的跨平台和浏览器上分发测试。Ranorex给企业提供了一个低价模式。

证书:商业

10.Robot framework

Robot Framework是一个开源的自动化框架,它实现了用于验收测试和验收测试驱动开发(ATDD)的关键字驱动方法。Robot Framework为不同的测试自动化需求提供框架。但是它的测试功能可以通过使用Python和Java实现额外的测试库来进一步扩展。Selenium WebDriver是一个广泛应用于Robot Framework的外部库。

测试工程师可以利用Robot Framework作为一个自动化框架,不仅用于web测试,而且用于Android和iOS测试自动化。对于熟悉关键字驱动测试的测试人员来说,可以很容易地学习机器人框架。

证书:开源

总结:

从上面可以看出Selenium风头正劲,Katalon Studio听起来也非常不错,一个工具可以做所有的测试,值得研究研究!

从这些工具支持的脚本语言来看,Java无疑是最普遍被支持的语言,选择Java语言,尝试其它工具的时候也比较容易。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-12-05 17:17 51testing 阅读(144) | 评论 (0) | 编辑 收藏
 
你该了解的自动化测试工具:Selenium控制浏览器的常用方法!

Selenium怎么来的?

Selenium这个词,是化学元素硒(Se)的意思。在软件测试领域,它是绝对的自动化测试开源项目的标杆。取这个名字也是有讲究的,在当时乃至如今的软件测试领域,QTP(UFT)占有率非常高。Quick Test Professional是Mercury公司开发的,自然就是汞(Hg)。在生物学,研究发现硒对汞有拮抗作用,也就是硒克汞。Selenium取名的用意不言而喻。


Selenium控制浏览器的操作

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。

这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

有时候我们希望能让浏览器以某种尺寸打开,让访问页面在这种尺寸下运行,或者控制浏览器进行后退与前进操作等等。

今天主要介绍一下浏览器控制的一些常用属性和方法,他们大多集中在selenium.webdriver.remote.webdriver类中。不管是用哪种浏览器,他们都继承自remote.webdriver类,用的方法属性都是相同的。

下面举个几个控制浏览器的例子。

一、控制浏览器窗口大小

有时候我们希望能以某种浏览器尺寸打开,让访问的页面在这种尺寸下运行。例如可以将浏览器设置成移动端大小(480* 800),然后访问移动站点,对其样式进行评估;WebDriver提供了set_window_size()方法来设置浏览器的大小。


二、设置休眠时间

由于打开百度网址后,页面加载需要几秒钟,所以最好等到页面加载完成后再继续下一步操作。


三、控制浏览器前进后退

在使用浏览器浏览网页时,浏览器提供了后退和前进按钮,可以方便地在浏览过的网页之间切换,WebDriver也提供了对应的back()和forward()方法来模拟后退和前进按钮。下面通过例子来演示这两个方法的使用。


四、页面刷新

有时候页面操作后,数据可能没及时同步,需要重新刷新。


五、页面截图

自动化用例是由程序去执行的,因此有些时候打印的错误信息并不十分明确。如果在脚本执行出错的时候能够对当前窗口截图保存,那么通过图片就可以非常直观的看出出错的原因。WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口:


值得注意的是,当使用窗口截屏功能时,图片的扩展名必须是png!!

六、关闭退出浏览器

退出有两种方式,一种是close;另外一种是quit。

close用于关闭当前窗口,当打开的窗口较多时,就可以用close关闭部分窗口;

quit用于结束进程,关闭所有的窗口。


总结:

先列举几个常见的属性:

current_url: 返回当前浏览器的url

title: 返回当前页面title

current_window_handler:返回当前窗口的句柄,这在多窗口切换的时候会用到

window_handlers: 返回当前浏览器的所有窗口的句柄。

以下是常见的控制浏览器的方法:

get(url): 加载指定的网页

back()/forward(): 对应于浏览器的向前向后按钮

implicitly_wait(time): 隐式等待,在元素被找到前的等待时间,time的单位是秒。它的作用域是全局的,一个session只用设置一次,任意元素如果在指定时间内没有被找到则抛错。会用单独一篇来介绍元素等待的话题,在这里就不详细解释了

close(): 关闭当前的窗口

quit(): 关闭整个浏览器,所有的窗口都会关闭

refresh(): 刷新网页

get_screenshot_as_file(filename): 保存浏览器的截图到一个png文件, 这里要注意filename需要是一个完整的路径,例如/Users/jack/Downloads/screenshot.png.

set_window_position(x,y,windowHandle='current'): x,y的单位是像素,设置浏览器的位置。get_window_position()则可以获得浏览器当前的位置

set_window_size(width,height, windowHandle='current'): width, height的单位是像素,设置浏览器的长宽。get_window_size()可以获得浏览器的尺寸

maximize_window(): 最大化窗口

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-12-04 17:14 51testing 阅读(155) | 评论 (0) | 编辑 收藏
 
程序员必备:30个MySQL数据库常用小技巧,值得收藏!

无论是运维、开发、测试,还是架构师,数据库技术是一个必备加薪神器,那么,一直说学习数据库、学MySQL,到底是要学习它的哪些东西呢?

下面我将分享30个MySQL数据库常用小技巧,希望能给刚入行或数据库爱好者一些帮助,今后再遇到任何报错,我们都可以很淡定地去处理。学习任何一门技术的同时,其实就是自我修炼的过程。沉下心,尝试去拥抱数据的世界!


1、如何选择服务器的类型?

MySQL服务器配置窗口中各个参数的含义如下。

【Server Configuration Type】该选项用于设置服务器的类型。单击该选项右侧的向下按钮, 即可看到包括3个选项。

3个选项的具体含义如下:

Development Machine(开发机器):该选项代表典型个人用桌面工作站。假定机器上运行 着多个桌面应用程序。将MySQL服务器配置成使用最少的系统资源。

Server Machine (服务器):该选项代表服务器,MySQL服务器可以同其它应用程序一起 运行,例如FTP、email和web服务器。MySQL服务器配置成使用适当比例的系统资源。

DedicatedMySQL Server Machine (专用 MySQL 服务器):该选项代表只运行MySQL服务的服务器。假定运行没有运行其它应用程序。MySQL服务器配置成使用所有可用系统资源。作为初学者,建议选择【DevelopmentMachine】(开发者机器)选项,这样占用系统的资源 比较少。

2、MySQL中如何使用特殊字符?

诸如单引号(’),双引号("),反斜线()等符号,这些符号在MySQL中不能直接输入 使用,否则会产生意料之外的结果。在MySQL中,这些特殊字符称为转义字符,在输入时需要 以反斜线符号(’’)开头,所以在使用单引号和双引号时应分别输入(’)或者("),输入反 斜线时应该输入(),其他特殊字符还有回车符( ),换行符( ),制表符(ab),退格 符()等。在向数据库中插入这些特殊字符时,一定要进行转义处理。

3、MySQL如何执行区分大小写的字符串比较?

在Windows平台下,MySQL是不区分大小的,因此字符串比较函数也不区分大小写。如果 想执行区分大小写的比较,可以在字符串前面添加BINARY关键字。例如默认情况下,’a’=‘A’返回结果为1,如果使用BINARY关键字,BINARY’a’=‘A’结果为0,在区分大小写的情况下,’a’与’A’并不相同。

MySQL语句优化技巧

MySQL数据库性能的优化是MySQL数据库发展的必经之路, MySQL数据库性能的优化也是 MySQL数据库前进的见证,下面介绍下MySQL语句优化的一些小技巧:

1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

2、对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引。

3、应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0

4、尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num=10 or num=20

可以这样查询:

select id from t where num=10

union all

select id from t where num=20

5、下面的查询也将导致全表扫描:(不能前置百分号)

select id from t where name like ‘�c%’

若要提高效率,可以考虑全文检索。

6、in和not in也要慎用,否则会导致全表扫描,如:

select id from t where num in(1,2,3)

对于连续的数值,能用between就不要用in了:

select id from t where num between 1 and 3

7、如果在where子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

select id from t where num=@num

可以改为强制查询使用索引:

select id from t with(index(索引名)) where num=@num

8、应尽量避免在where子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where num/2=100

应改为:

select id from t where num=100*2

9、应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where substring(name,1,3)=’abc’–name以abc开头的id

select id from t where datediff(day,createdate,’2005-11-30′)=0–’2005-11-30′生成的id

应改为:

select id from t where name like ‘abc%’

select id from t where createdate>=’2005-11-30′ and createdate<’2005-12-1′

10、不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

11、在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

12、不要写一些没有意义的查询,如需要生成一个空表结构:

select col1,col2 into #t from t where 1=0

这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:

create table #t(…)

13、很多时候用exists代替in是一个好的选择:

select num from a where num in(select num from b)

用下面的语句替换:

select num from a where exists(select 1 from b where num=a.num)

14、并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

15、索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert及update的效率,因为insert或update时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有 必要。

16.应尽可能的避免更新 clustered 索引数据列,因为clustered索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新clustered索引数据列,那么需要考虑是否应将该索引建为clustered索引。

17、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

18、尽可能的使用varchar/nvarchar代替char/nchar,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

19、任何地方都不要使用select * from t,用具体的字段列表代替“*”,不要返回用不到的任何字段。

20、尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。

21、避免频繁创建和删除临时表,以减少系统表资源的消耗。

22、临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。

23、在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替create table,避免造成大量log,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

24、如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table,然后drop table,这样可以避免系统表的较长时间锁定。

25、尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。

26、尽量避免大事务操作,提高系统并发能力。

总结:

如何快速掌握MySQL?

1、培养兴趣,夯实基础

对于MySQL的学习来说, SQL语句是其中最为基础的部分,很多操作都是通过SQL语句来实现的。所以在学习的过程中,要多编写SQL语句,对于同一个功能,使用不同的实现语句来完成,从而深刻理解其不同之处。

2、及时学习新知识,多实践操作

数据库系统具有极强的操作性,需要多动手上机操作。在实际操作的过程中才能发现问题, 并思考解决问题的方法和思路,只有这样才能提高实战的操作能力。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-12-03 17:42 51testing 阅读(76) | 评论 (0) | 编辑 收藏
 
干货丨实现UI自动化测试,这5个常见问题你应该知道!

UI自动化测试一直都是如此的令人纠结,自动化测试初学者总是拿它入门,但有些经验丰富者对其又是毁誉参半,抑或抛出分层自动化测试那个经典的“金字塔”,来说明UI自动化测试还是少做为好。

我在从事7年产品研发之后,临危受命转向测试领域,至今又7年有余。期间最关注的一直是UI端/用户端的自动化技术:从Web应用到移动App、从测试到RPA(机器人流程自动化)、从框架研发到应用推广。

下面我就分享下为什么要做UI自动化测试、UI自动化测试要点以及其他的心得体会,希望能给各位同行带来思想上的碰撞。


1、首先,讲讲UI自动化测试的误区吧

误区一: UI自动化没用

造成这个误区的原因也很简单。技术和业务拆解能力不足就直接去搞自动化了。所以自然就没什么好效果,然后总结出了一个结论--UI自动化没有什么用。

误区二: UI自动化实现很简单

之所以有这么一个误区原因也很简单。UI自动化不论是selenium、rf还是TestWriter。平常用的API确实没多少,很好学。稍微有代码基础的人就能很快上手,TestWriter更是0编码都可以上手,所以觉得这真的很简单。但其实,如果想要更长远的发展,需要学习的东西还有很多。

2、自动化测试分层

测试金字塔:

单元自动化测试(数据处理层):指对软件中最小的可测试单元进行检查和验证,一般需要借助单元测试框架,如java的Junit、TestNG,python的unittest,常见的手段是code review等;

接口自动化测试(业务逻辑层):主要检查验证模块间的调用返回以及不同系统、服务间的数据交换,常见的接口测试工具有postman、jmeter、loadrunner等;

UI自动化测试(GUI界面层):UI层是用户使用产品的入口,所有功能通过这一层提供给用户,测试工作大多集中在这一层,常见的测试工具有UFT、Robot Framework、Selenium、Appium等;

性价比:按照测试金字塔模型以及投入/产出比,越向下,回报率越高;

Google的自动化分层投入占比:

小测试(Unit):占比70%;

中测试(Service):占比20%;

大测试(UI):占比10%;

自动化测试面临的挑战:面临的最大挑战就是变化,因为变化会导致测试用例运行失败,所以需要对自动化脚本不断debug,如何控制成本、降低成本是对自动化测试工具以及人员能力的挑战。

3、什么样的项目适合自动化测试


如上图所示,真正工作中无法全部满足以上条件,所以需要作出权衡,一般来说,只需要满足以下几点,就可以对项目开展自动化测试(图中红色框标注的选项):

①需求稳定,不会频繁变更

自动化测试最大的挑战就是需求的变化,而自动化脚本本身就需要修改、扩展、debug,去适应新的功能,如果投入产出比太低,那么自动化测试也失去了其价值和意义;

折中的做法是选择相对稳定的模块和功能进行自动化测试,变动较大、需求变更较频繁的部分用手工测试;

②多平台运行,组合遍历型、大量的重复任务

测试数据、测试用例、自动化脚本的重用性和移植性较强,降低成本,提高效率和价值;

③软件维护周期长,有生命力

自动化测试的需求稳定性要求、自动化框架的设计、脚本开发与调试均需要时间,这其实也是一个软件开发过程,如果项目周期较短,没有足够的时间去支持这一过程,那自动化测试也就不需要了;

④被测系统开发较为规范,可测试性强

主要出于这几点考虑:被测试系统的架构差异、测试技术和工具的适应性、测试人员的能力能否设计开发出适应差异的自动化测试框架;

4、常见的自动化测试工具简介

UFT

即原来的QTP与ST合并而来,由HP公司开发,是一个企业级的商业自动化测试工具,提供了强大易用的录制回放功能,

同时兼容对象识别模式与图像识别模式,支持B/S和C/S两种架构的软件测试;

Robot Framework

一款基于python语言编写的自动化测试框架工具,具备良好的扩展性,支持关键字驱动,支持多种类型的客户端和接口,可进行分布式测试;

Selenium

应用于web的自动化测试工具,支持多平台、多浏览器、多语言来实现自动化,优点如下:

①开源、免费;

②多浏览器支持:chrome、Firefox、IE、Edge等;

③多平台支持:Linux、Windows、MAC;

④多语言支持:java、python、Ruby、C#、JavaScript、C++;

⑤对web界面有良好的支持;

⑥简单(API简单)、灵活(开发语言驱动);

⑦支持分布式测试用例执行;

5、做UI自动化测试,需要什么技能

①前端相关技术

HTML、XML、JavaScript、TCP/IP协议等

②一门编程语言

就像前面说的,selenium支持多种语言,根据个人情况以及项目的开发语言酌情选择;

③合适的工具选型

比如selenium,比如UTF等;

④需求分析

项目类型,特质,生命周期,是否适合开展自动化测试等;

总结:

如果一个组织真正重视软件质量,UI自动化测试是有必要做的。有如下几点理由:

任何自动化工具都是在简单、机械、重复的任务场景下最能发挥作用,UI测试非常符合这个特点。

对于很多组织来说,UI测试是当前耗费测试团队人力最多的环节,大部分专职测试人员日常工作就是UI测试。“工欲善其事必先利其器”,测试人员也需要自动化工具来提升其日常工作效率。

无论后台多复杂、多重要,用户接触的终究还是前端界面。现在的软件除了后台逻辑之外,还有很多前端脚本逻辑和样式,单纯靠后台接口/单元测试,无法证明用户端的可用性。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-11-30 17:37 51testing 阅读(119) | 评论 (0) | 编辑 收藏
 
仅列出标题
共55页: First 12 13 14 15 16 17 18 19 20 Last