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

评论排行榜

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

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

记一次Python脚本实现内存泄漏测试的方法及解决过程,经验分享篇
     摘要: 我下面这篇文章提供了一种轻巧的内存泄漏测试方法及其python实现,该方法在Lenovo Bamboo系统的验收测试活动中得到过诸多检验,是一种易用有效的内存泄漏测试方法。一、内存泄漏测试原理1、内存泄漏的危害。内存泄漏的危害不必多说,会导致系统的可用内存越来越少,影响系统长时间运行的稳定性。2、常用的内存泄漏测试方法一般而言,可概括为两种思路:1)内存分配、释放工具检查如valgrind等内存测...  阅读全文
posted @ 2019-08-19 17:49 51testing 阅读(99) | 评论 (0) | 编辑 收藏
 
DevOps兴起意味着专职测试人员消失?三分钟测试:什么是DevOps?

出品方:Atstudy网校

网友小Q的提问:

我最近准备去面试测试开发工程师岗位,岗位要求中提到需要熟悉“Devops方法论”,会使用相关工具链及部署Docker、Jenkins等”,我想知道面试官会提些什么问题?我又该如何回答呢?

Atstudy网校小A的回答:

DevOps是一种软件开发的解决方案,涉及软件在整个开发生命周期中的持续开发,持续测试,持续集成,持续部署和持续监控。

DevOps 适合“软件即服务(SaaS)”或“平台即服务(PaaS)”这样的应用领域,其最显著的特征就是:

打通用户、PMO、需求、设计、开发(Dev)、测试、运维(Ops)等各上下游部门或不同角色;

打通业务、架构、代码、测试、部署、监控、安全、性能等各领域工具链;

DevOps是一个自动化过程,允许快速,安全和高质量的软件开发和发布,它可以提高客户满意度,这就是为什么前沿互联网公司及中大规模企业选择DevOps作为其业务目标的前进方向的原因, 同时也是当前及未来整个IT行业大趋势下的主流解决方案,无论你以什么角色出现在项目团队中,Devops必须是你知识储备锦囊中不可或缺的点金石。

面试官通常在面试中会问到以下几个问题,供参考。

问题1:谈谈您对DevOps和持续交付的理解。

DevOps 是旨在打破开发团队与运维团队之间的壁垒的一次尝试。

通常来说 DevOps 与持续交付实践是一回事,因为在我们进行软件交付时,这两者是紧密关联的。

不过,有一种关键的实践会巩固 CD 流程,即部署管道。

它的作用不仅仅体现在通过某个 CI 服务器对每次代码变更重新构建并测试你的应用,部署管道是整个交付流程的一个模型,包含了从提交到投入生产环境的全部过程。

问题2:如何从工程角度来保证UI自动化测试的落地实施。

使用适合的设计模式编写测试脚本;

引入爬虫策略,执行UI自动化测试前先对比变动范围并更新元素信息;(对UI自动化测试来说,元素信息的变更非常频繁这个因素是我们实施UI自动化测试最头痛的因素,那么我们就可以引入爬虫策略来减少UI变动频繁带来的烦恼。具体策略是:先执行爬虫,将我们UI自动化测试脚本中所用到的元素信息全部更新成最新的,这样,在我们执行UI自动化测试脚本时就可以节省很多时就来规避因为UI层元素信息变更带来的大量的测试脚本维护工作了)

同时使用多机并行策略,减少UI自动化执行的耗时。

问题3:您所了解的持续交付流水线是怎样的?

开发提交代码到远程仓库;触发持续交付中的构建(拉取代码并编译);

更新测试环境;执行自动化测试;生成测试报告;推送构建消息。

问题4:白盒测试策略有哪些?

代码走查,静态代码扫描,单元测试。

问题5:您了解的Java编译工具有哪些?它们的优缺点是什么?

常用的Java的编译工具有Ant,Maven,Gradle。

它们的区别是:

Ant是第一个“现代”构建工具,在很多方面它有些像Make。2000年发布,在很短时间内成为Java项目上最流行的构建工具。它主要的不足是用XML作为脚本编写格式,大型项目中配置信息很多,这种方式很难维护。

Maven则是使用POM项目对象模型来管理项目配置,这样一来配置文件就会相对简洁,并且配置文件的复用性非常好。另外,Maven有3个独立的生命周期,在任何一个生命中执行构建目标,该生命周期阶段的之前所有阶段都会被执行,非常便于我们的编译构建。

Gradle结合了前ant和maven的优点,它具有Ant的强大和灵活,又有Maven的生命周期管理且易于使用。

Gradle不用XML作为配置文件,它使用基于Groovy的专门的DSL(Domain-Specific Language领域特定语言)来作为配置文件,从而使Gradle的构建脚本非常简洁清晰。

问题6:聊聊您对Svn和Git的理解。

SVN是集中化版本管理工具的代表,它要解决的问题是:如何让在不同系统上的开发者协同工作。 SVN的工作原理是:有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

Git是分布式管理工具,它要解决的问题是:集中化版本控制的不足。 Git的工作原理是:客户端把代码仓库完整地镜像下来,这样一来,每一次的拉取操作,实际上都是一次对代码仓库的完整备份,就不存在中央仓库的概念了,因为任何一个客户端的镜像都和远程仓库一样。

想知道这些面试问题的完整回答吗?扫码添加小姐姐微信:sy51testing,备注“DevOps”,即可获取。

感谢Atstudy网校 热销课程《DevOps多维场景工具链实战》的晴空老师的大力支持。

《DevOps多维场景工具链实战》:http://www.atstudy.com/course/1625


posted @ 2019-08-16 17:40 51testing 阅读(117) | 评论 (0) | 编辑 收藏
 
软件测试工程师如何从功能测试转成自动化测试?经验分享篇

随着测试行业的发展,"会代码"越来越成为测试工程师的一个标签。打开各大招聘网站,测试工程师月薪一万以上基本都有一个必备技能,那就是自动化测试。那么自动化测试到底难不难呢?下面我将会将我的经历讲给大家听,希望听完后,大家会有自己的一个判断。

1、我是谁

大家好,我是软件测试汪。不知不觉,入行软件测试也有小5个年头。待过创业公司也待过上市公司。做过功能测、自动化测试也做过性能测试。做过测试新人也做过测试组长。如果要是从这5年中说出最宝贵的经验,我想应该是知识体系化。那么什么是知识体系化,每个人都有不同,下面简单来谈一下我的知识体系化。

2、我的成长路线

功能测试——>UI自动化

回想刚入行那会,功能测试都玩不溜。所以花了很多时间在功能测试用例的设计上,随着项目越做越多。用例设计也变得手到擒来。自己的内心也不满足于只做功能测试,觉得自动化测试很厉害的样子。后来去学了代码基础。但是有一个问题,学了代码基础还是不会做自动化测试,因为那时候还傻傻分不清自动化到底有哪几种。随着学习的深入,知道软件测试中常见的自动化主要分为2种,一种是UI自动化,一种是接口自动化。那么先学哪个呢?当时觉得UI自动化有点不明觉厉,因为可以代替手工点点点,非常酷炫。后来又花小半年时间学习UI自动化。到这里可能有点人会说,UI自动化要学这么久吗?对于我当时来说,是的。虽然是计算机专业出身,但是大学学的东西基本都忘差不多了。我们先来看UI自动化要学哪些内容(以selenium举例),下面用个思维导图简单列一下:

当然UI自动化需要学的内容远不止以上这些,这些东西算是比较核心的。学习过程中所有的知识都是零散的,想要组合起来对一个小白来说却是很难。后来有机会加入一个新的公司,需要用到UI自动化,然后去GitHub上找了很有优秀的代码以及看一些博客,终于实现了第一个自动化项目。那种感觉是非常棒的,但是也被个大神说这有啥,不就是按键精灵吗(捂脸哭)

UI自动化——>接口自动化

当然,也是被这个大神带上走接口自动化之路,有了UI自动化学习经验,学习接口自动化基本没有费什么功夫。如果让我说UI自动化和接口自动化各有哪些优缺点,这是不好比较的,其目的都是为了软件质量。但是如果让我选择,我会选择接口自动化,因为接口一般是不容易变得的,UI界面是经常变的,所以接口自动化的维护成本相对较低。

接口自动化——>性能测试

UI自动化,接口自动化学完了,学什么呢?我又去学了性能,为什么学性能,完全是工作需要,后来发现性能真的是个无底洞,需要了解开发知识、服务器架构、操作系统、测试监控工具、容器知识等等。知识面太广,现在还在苦苦挣扎。当然在性能测试过程中,也去学了一些开发知识,之前做UI/接口自动化或者功能测试时只能从黑盒/灰盒层面去判断BUG原因,学了开发知识后,大概就知道这个bug是如何产生了。这对我自己的测试生涯也算是有了一个提高。

说了这么说,其实我们软件测试人员的知识体系常见的就以下几点:

当然这个体系要细可以很细,每个点可能都需要串很多知识,但是当我们真正用到的时候,发现其实很多知识都可以串起来的。当我们有了自己的知识体系,我想,不论在哪家公司,不论什么项目,基本都可以做到游刃有余。当然这个体系里面有一个最重要一点,就是记笔记!这也是我为什么花3个月时间整理《测试开发之Python Django 接口自动化测试框架实战》路线图的原因。

3、我整理的接口自动化测试

下面来看一下我整理的《测试开发之Python Django 接口自动化测试框架实战》有哪些内容:

《测试开发之Python Django 接口自动化测试框架实战》路线图分为7个部分

第一部分python、python IDE 以及本地数据库环境安装。

第二部分django的基础,让大家对django有一个快速的认识。

第三部分http协议以及cookie和session,然后根据前面所学知识开发一个博客系统以及教会大家如何编写接口测试文档。

第四部分Python下面的requests库,是接口自动化必备技能。

第五部分unittest单元测试框架,如何使用参数化编写接口测试用例,如何初始化我们的数据库,如何批量运行我们的测试用例以及生成测试报告。然后带大家开发一个属于自己的接口自动化测试框架。

第六、七部分git/GitHub基础,带领大家对项目进行持续集成。

那么为什么是这7个部分?

1)虽然是如何使用python做接口自动化测试。但是我们为什么讲开发?我们常常说接口测试接口测试,那么什么是接口?接口如何开发?想一下,如果我们连接口都会开发了,接口测试对于我们测试人员来说是不是小菜一碟。

2)一定要有python基础。因为Django本身也是python下的一个框架。

3)好了,接口开发出来了,也会使用python做接口自动化测试了,这样就够了吗?答案是当然不够。为了满足企业级需求,我加入了Git/GitHub以及持续集成的部分。

4.技术基础及如何进阶?

技术要求:

Python基础!Python基础!Python基础!重要的事情强调3遍。

比如简单的接口我们会开发了,那么如何去开发一个完整的系统(接口测试平台)?就需要我们深入学习前端知识和Django开发知识了。这也是我们成长为测试开发的必经之路。再比如我的路线图中用的是MySQL数据库,如果我们项目用的是oracle数据库,我们应该如何连接以及如何初始化我们的数据库呢?学习无止境,搜索引擎会是我们最好的工具。

5.你能收获什么?

有了代码量,不论是在公司还是出去找工作也会更加自信。回到我们开始提出的问题,自动化测试到底难不难?我的答案是看你想不想学。4G的普及,带动了APP的快速发展,同时也养活了我们很多测试工程师。5G就在眼前,我们很难预知5G是否会是测试人员的一个机遇。但是我们可以肯定,如果我们止步不前,未来一定会离我们越来越远。距离2020年还有5个月,利用这5个月好好学习,希望大家不管是技术还是荷包都会有一个大的收获。


posted @ 2019-08-15 18:11 51testing 阅读(114) | 评论 (0) | 编辑 收藏
 
“大数据杀熟”刷屏,网友亲测后气炸!互联网的底线何在?

相信很多小伙伴发现在某个app上用自己账号搜索出的商品价格和用爸妈的账号搜索出的商品价格不一样,有的时候价格相差得还很大,这是什么原因呢?是app出现了bug,还是自己眼花了?两者都不是,实际上这个现象就是大数据杀熟。不止是购物方面,线上的很多订单都存在杀熟的影子。

互联网的兴起已经有很多年了,这些年来沉淀下很多用户数据,商品信息数据,用户行为数据等等,这些数据对于商业营销是非常宝贵的资产,如何研究这些数据,并从中挖掘出其中的价值已经是互联网商业发展的必备技能。

如果说,互联网底层技术是互联商业发展的第一梯队,大数据分析就是互联网商业发展的第二梯队。当然,随着以后的发展,互联网商业也会遇到其他的发展挑战。大数据分析不止适用于线上商业,实体商业也同样需要大数据的分析结果作为运营基础。

大数据乍听起来好像是深不可测的样子,感觉离自己很遥远,实际上接触了之后会发现大数据离自己还是很近的。举个简单的例子,十一假期你准备出去玩,但是不知道去哪里好,作为一个互联网时代的人,我们的第一反映就是去网上搜索“十一旅游圣地”,然后再查评价,查攻略,查注意事项等等,然后再根据经验啊、直觉啊、喜好啊等等判断搜索出的信息的可靠程度,最后决定十一假期去哪里完。这一套下来就是整个数据分析的雏形。

小伙伴们理解了吗?当然大数据分析可不是上面说的那么简单,里面涉及了很多技术上和算法上难点。这段时间接触了一些大数据方面的需求,简单来讲大数据只有几个步骤:数据提取、数据清洗、数据存储、数据展示、数据分析。对于测试来讲,大数据方面方面主要涉及的环节是数据提取、数据清洗、数据存储、数据展示四个阶段,数据分析也有涉及但主要是协助,数据分析需要机器学习和数学的知识。

一、数据提取

说到数据提取不得不说的就是数据来源。赵本山的小品里有一句话:“我不想知道我是怎么来的,我只想知道我是怎么没的。”但是,在数据提取里我们一定要知道数据是怎么来的。

数据是怎么来的一般需要知道几个问题:

1、数据是从哪里来的?

2、数据是通过什么方式来的?

3、数据提取的类别是什么?

这几个方面直接影响数据提取的准确性和数据提取的效率。

数据是从哪里来的?

1)数据由公司系统采集提取;

2)数据由合作公司处理后传输

数据是通过什么方式来的?

1)由业务人员管理平台手动输入到数据库中;

2)通过插码或者其他技术方式存储入库;

3)接口传输数据入库;

4)通过文件传输数据,解析文件内容入库

数据提取的类别是什么?

1)增量提取

2)全量提取

这些数据被称为源数据,提取成功后会存储到指定的数据库中。在提取的过程中,如果数据不符合规范或者数据量级超出系统能够承受的阙值,数据提取将会有误或者失败。

二、数据清洗

数据清洗就是把脏数据清洗掉,提高数据质量。?在数据提取的过程中会应为某种原因导致存如数据库中的数据质量存在问题。这些数据在后续的分析中没有任何实际的意义,甚至会导致数据无法进行分析。

数据清洗一般包括数据分析,定义和执行清洗规则,清洗结果验证等步骤。数据清洗一般会检查拼写错误、去掉重复的(duplicate)记录、补上不完全的(incomplete)记录、解决不一致的(inconsistent)记录。确认数据不存在数据内容和数据属性的问题后,会根据业务规则或者数据分析人员的要求重新整合数据。

三、数据存储

整合完毕的数据需要存储到目标数据库中,在数据存储过程中有些数据的格式、长度不符合数据库表的规范,这些数据便会入库失败。

截止到2012年,数据量已经从TB(1024GB=1TB)级别跃升到PB(1024TB=1PB)、EB(1024PB=1EB)乃至ZB(1024EB=1ZB)级别。由于大数据的量级如此庞大,因此在数据存储时不仅仅要考虑数据存储的准确性,还需要考虑数据存储的效率以及数据存储发生异常时数据的回滚问题。

四、数据展示

大数据的量级决定了数据库表的结构会比较复杂。一般会根据业务按照月份、省份建表。也就是说同一个业务报表中的数据会从不同的表中读取。因为数据的来源不同,页面的展示就会有很多意外的“惊喜”。比如数据展示不正确,或者数据根本就不展示。常见原因有以下几点:

1)页面报表的横向和纵向内容与数据库的表结构不符

2)数据库表中没有数据

3)页面调度数据脚本没有执行

4)前端定义错误,页面报错

数据经过以上的处理之后就会发送给大数据分析工程师,对用户的分析(“杀熟”)就开始了。很多人对于大数据“杀熟”都很不喜欢,但是这是一种商业的运营模式,只不过是由之前的线下“杀熟”变成的现在的线上“杀熟”。这也是人们生活习惯的变化,也体现了技术的进步,习惯就好。对于大数据测试来说,测试的对象变得更加抽象,对于技术的要求则更高。但是这也不代表着大数据测试时高不可攀的,大数据测试的根本还是测试,基本功扎实,再补充大数据方面的知识,这些问题都不是事。

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

posted @ 2019-08-13 17:34 51testing 阅读(147) | 评论 (0) | 编辑 收藏
 
测试实战分享:关于词根字典用户测试的案例研究

1、被测试对象

  词根字典是一款结合了传统在线英文词典和英语词根词缀的综合查询系统。是一个全新的由年轻人组成的团队,创立于2012年7月,其团队致力于打造一款最实用的英语单词以及词根词缀查询系统。(词根作为英语单词的核心,不但对单词的形、义两方面起决定作用,对其发音也有重要的影响。有效掌握词根词缀,可帮助提高英语能力)

产品定位——为用户在学习或工作中提供单词、词根、词缀查询功能。


2、测试目标

  找到用户在使用该产品时遇到的功能性问题,并提出修改意见来提高产品的可用性。

3、参与测试者信息

  根据所选产品的功能特性,且项目进行时正好是四六级考试期间,所以最终选取了8位测试者(皆为大学在校学生),其中4位(测试者1、2、3、4)在这段时间是经常使用单词查询软件或网站的,另4位(测试者a、b、c、d)在这段时间不经常使用单词查询功能。分为两组来完成制定的测试任务。

4、测试任务

  基本功能测试(二分式成功任务):

目标1:用户注册登录功能可用性测试


目标2:单词查询功能可用性测试


目标3:词根词缀查询功能可用性测试


次要功能测试(成功等级的任务):

目标4:生词本功能可用性测试(查询过程中积累的生词,帮助记忆)


目标5:用户信息完善功能可用性测试


5、测试规则制定

(1)任务时间的计算规则

  首先,每个任务给予一个“限定时间”,根据每个任务的价值与难易程度来主观评估,将限定时间一般设定为5-10倍熟练时间。以下表格为任务具体评判标准:


(2)任务完成度规则制定

任务的完成情况分为三种状态:


  任务完成效率是基于时间来测量,从测试者拿到任务开始计时,不等到测试者读完任务、开始操作时才计时。(可能有的人喜欢一边读一边做),在测试者宣布自己已经完成、或者限定时间到了的时候即结束计时。不是看到用户完成了就结束计时,而要测试者认为自己已经完成了,因为用户有时候会在做完操作之后去检查自己的操作是否成功了,这也应该算作任务用时的一部分。由于任务本身就存在误差,测试者在操作过程中多说了句话、或者系统响应速度慢,这些会影响任务的完成时间,所以对于记录的精确度意义并不是很大。

可用性测试_2任务完成可视化结果及分析



结果分析:

  在基本功能测试任务?中,任务1_用户注册任务中有2位测试者(1和a)完成时间超过限定时间,是为“任务部分完成”的情况,其余测试者顺利地在限定时间内完成任务。数字组(经常使用)与字母组(不经常使用)的任务1测试结果无明显差异

  任务2_单词查询任务中,经常使用该功能的测试者都在限定时间内完成测试任务,成功率为100%;在这段时间不经常使用该功能的测试者该任务的成功率为87%,即有一位测试者在限定时间内完成部分任务。结果可以看出数字组测试者(经常使用)能够更好或者更熟练地使用该功能。

  在任务3_词根词缀查询测试任务中,数字组测试者任务完成成功率低于字母组测试者。不经常使用查询功能的测试者能够掌握词根词缀查询功能。

  在?次要功能测试任务?中,任务4_生词本添加功能测试任务成功率为74%;任务5_更新个人信息功能任务完成的成功率为87%(任务成功率=(完全完成测试者数+部分完成测试者数*0.5)/测试者总数)。说明这两项任务测试中,功能4测试中遇到的问题比任务5要多。

可用性测试_3通过综合多种因素的严重性评估进行问题总结

综合多种因素严重性评估定义

产品目标和用户需求的影响


技术成本级别定义



可用性测试中发现的问题

  1、在测试任务1_用户注册功能测试中,测试者使用该功能的熟练程度一般,在限定内完成部分任务的原因有①因为注册时填写的用户名过短,经过系统提示需要进行重新注册。②填入的验证码错误,经系统提示后重新注册。

  2、在测试任务2和3中,英语单词和英语词根词缀查询功能可用性良好,测试者能够较好理解其反馈的释义和掌握该功能。

  3、在测试功能任务4中,生词本添加功能的使用操作简单且流畅,但测试中发现添加生词后,生词本中没有实时显示所添加的生词,等待系统生词反馈时间过长,所以生词本(用于记录和帮助用户记忆)功能的可用性较差。

  4、用户的个人资料完善有利于网站社区用户的交流和发展,在用户更新个人资料并切换个人头像的测试任务5中,测试者操作熟练程度不高,且发现个人头像更换后,系统虽然有提示成功,但网页中并没有显示出更新后的图片,一直还是原始的灰色头像,头像更换功能可用性差。

  整体来说该产品各项基本功能都可以满足用户的需求,但还部分功能需要更好地完善,来提高用户体验的满意程度,同时需要突出该网站的竞争优势,加大宣传与推广,让更多人了解与使用。

可用性测试_4词根字典客户旅程地图






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

posted @ 2019-08-12 18:01 51testing 阅读(112) | 评论 (0) | 编辑 收藏
 
如何将bug杀死在摇篮里?解读压测必经之路JMeter分布式的技术点

JMeter是当前Web性能测试中应用最为广泛的工具,简洁强大的界面,开源免费的授权,以及广泛的插件扩展,使得JMeter能满足几乎所有Web场景的性能测试。然而,单机性能的限制,是JMeter一直以来最大的诟病。

由于采用Java多线程进行并发用户的模拟,使得线程数的增加自然增加了测试机的资源消耗。一边是被测系统并发数的日益提高,一边是JMeter单机性能的掣肘。测试人员仿佛是走钢丝的杂技演员,平衡木的一边是并发数,一边是测试机的资源,战战兢兢、小心谨慎的想找到其中的平衡。


实际上JMeter提供了一种分布式压测的方法提高并发能力。本文介绍如何配置一个JMeter的分布式测试环境,并对单机和分布式的测试机资源占用情况进行对比。最后,对分布式的线程数、并发机制以及影响分布式TPS的采样信息回送模式进行说明。

一、引入JMeter分布式

JMeter是Web性能测试中的利器,基本属于Web压测的事实标准。然而使用过JMeter的测试人员会发现,当并发用户增加后,JMeter本身的性能也会急剧下降,导致无法对被测系统施加压力。

以一个实际环境为例,系统配置为:Windows 7旗舰版,i5-4590单CPU4核4线程,4G内存。使用JMeter3.1,Java8进行测试。

当并发线程设置为1000时,资源占用如下图。


继续增加线程个数为1500,此时运行出现错误如下。


查看日志中的记录,可以看到由于内存不足,无法启动新的线程。


如果我们需要更多的线程并发,此时就必须使用JMeter的分布式压测了。

二、环境搭建

遵照JMeter官网的方法,很容易搭建适合自己需要的分布式环境。以下图的实际环境为例,测试机A作为压测的协调主机(即上述的机器),B和C作为执行机,实际完成压力的发送,被测系统位于D上。


具体配置过程如下:

1、执行机属性配置。配置执行机RMI服务的端口,修改\apache-jmeter-3.1\bin下的jmeter.properties,将如下属性修改为指定的端口:server_port和server.rmi.localport。本例中B均修改为1039,C均修改为1058。如下图:



2、启动执行机的监听服务。在执行机上启动服务,打开\apache-jmeter-3.1\bin下的jmeter-server.bat即可。启动图如下。



说明在B的1039端口,C的1058端口均启动了执行的服务,等待协调主机的命令。

3、协调主机属性配置。配置协调主机连接的执行机和端口,修改\apache-jmeter-3.1\bin下的jmeter.properties,将remote_hosts属性修改为需要连接的执行机IP和端口。如下图。


4、执行测试。启动协调主机的JMeter,通过界面进行启动。


如上图,通过Run->Remote Start可以启动单个执行机,通过Remote Start All启动全部执行机。

三、资源对比

在前面我们看到,单台如上配置的测试机在启动1500线程时会出现内存不够用的情况。那么分布式的情况如何呢?

下图为协调主机的资源占用情况。


其中一台执行机的资源占用情况,执行机B,Windows10 教育版,i5-6500单CPU4核心4线程(3.20GHz),8G内存。


另外一台执行机的资源占用情况,执行机C,配置为Windows Server 2012 R2 Standard,Intel Xeon单CPU6核12线程。


四、注意事项

通过JMeter分布式进行压测,可以避免单机测试机资源的限制,提高压测的并发线程数。然而,还有一些细节需要注意。

1)线程数

JMeter分布式测试,是通过网络连接将协调主机载入的脚本分别传递(复制)给执行机,也就是说每个执行机拿到的脚本都是一致的,所以在每台执行机都会启动脚本中线程组指定的并发线程数。这样在设定脚本线程数目时,需要除以执行机个数,设定并发线程数。


以上述示例进行说明,期望完成1500用户并发,在单机测试时脚本设置并发线程为1500,而在有两条执行机的情况下需要设定为750,脚本修改如下。

此时启动远程测试Remote Start All后,看到界面的显示如下。


其中的1500/0,含义是一共启动了1500个线程,本机为0。

2)同步定时器的使用

我们知道,同步定时器(Synchronizing Timer)的意义在于提供瞬间压力的测试,其原理是阻塞期望个数的线程(用户),在同时进行释放,尽可能真实的模拟并发用户同时进行某操作的情况。那么在分布式并发的情况是如何的呢?我们将上述例子简化为20用户并发,即每个执行机10个线程,同时增加一个同步定时器,期望15个线程瞬间压测。脚本修改如下。


执行远程测试Remote Start All,监控结果树的情况。会发现没有任何请求被发送。这是因为,同步定时器仅在一个JVM中起作用,而分布式环境下属于两台机器的两个独立JVM,同步定时器无法生效。此时对于每个执行机,均启动了10个线程,但获得的脚本中需要等待20个线程再释放,所以两个执行机均不会向下执行。


JMeter官网原文如上,含义就是同步定时器阻塞线程的机制仅在一个JVM中,所以在分布式的情况下,设定的阻塞线程数不能超过每个执行机的并发线程数。本例中就是不能超过10线程。

类似的,高斯随机定时器(Gaussian Random Timer),固定定时器(Constant Timer),均匀随机定时器(Uniform Random Timer),泊松随机定时器(Poisson Random Timer),BeanShell定时器,BSF定时器,JSR定时器。由于是针对单线程的,所以不受分布式的影响。

当然,吞吐量定时器也是对于每个执行机独立进行限制的。也就是说,设置的吞吐量限定值,由于脚本是分别在每个执行机进行运行的,所以限定的也都是当前作用的执行机。

3)执行机测试结果回送方式

JMeter分布式的原理十分容易理解,在实际测试中就如同蝴蝶效应一样,一点细微的差别都会导致最终加压结果的巨大差异,从而导致最终测试结果的不确定性。在分布式测试中,执行机测试结果的回送方式影响非常大。

首先我们对比一下实际的测试结果。在协调主机和执行机上的配置文件\apache-jmeter-3.1\bin下的jmeter.propertie中,修改mode=StrippedBatch,如下截图。


注意在协调主机和执行机上均要修改。运行测试,此时我们查看协调主机的网络使用率和测试的TPS,可以发现对于百兆网卡使用了其中7%的流量,对于被测系统的TPS为461。


此时查看其中一个执行机的网络使用情况,也在可以接收的范围内。


接下来,修改mode=Standard,进行同样的测试。观察协调主机的测试结果如下。


可以看到100M网卡已经被消耗殆尽,使用率达到97.3%,而TPS也只有92,可以想象,此时对被测系统压力是非常有限的。同样的,可以看到执行机的网络使用情况如下。


对比之前的结果,也是让人堪忧的。可以想象,以这样的测试环境对被测系统进行测试,得到的测试结果能有多大的可信度。

JMeter官网有非常具体的描述,主要内容如下。脚本中的监听器会根据配置将测试结果回传,默认情况下当结果产生后同步回传到协调主机。这会影响测试的最大吞吐量,JMeter提供了配置属性对此进行干预,即jmeter.propertie文件中的mode属性。该属性可以有如下取值:

1)Standard:测试中的采样信息产生的同时回传给协调主机。

2)Hold:在测试结束前将采样信息保存在数组中。这种模式会占用执行机大量内存,不推荐使用。

3)DiskStore:在测试结束前,将结果存储在硬盘文件(由java.io.temp属性指定)中。这种序列化文件会在JVM退出后删除。

4)StrippedDiskStore:将成功的响应数据在采样信息中删除,之后使用DiskStore的方式处理。

5)Batch:当采样信息超过指定的阈值后,同步将采样信息发送。阈值可以是采样个数阈值(num_sample_threshold)或者时间(time_threshold),这两个阈值可以在执行机的jmeter.propertie文件中指定。

num_sample_threshold:累加的采样个数,默认为100。

time_threshold:时间阈值,默认为60000ms(即60秒)。

后面的Asynch模式与该模式类似。

6)Statistical:当采样信息超过指定阈值后,发送采样信息的摘要信息。根据线程组和采样名称进行表记。摘要包括如下字段:

Elapsed time:流逝时间

Latency:延迟

Bytes:字节

Sample count:采样个数

Error count:错误个数

其他字段会被丢弃。(5)中的两个属性也对该模式起作用。

7)Stripped:将成功的采样在响应数据中删除。

8)StrippedBatch:在响应数据中删除成功采样后,使用Batch模式。

9)Asynch:采样信息在本地队列中临时存储。启动一个独立的工作线程进行采样信息发送。这样能够允许测试线程得以持续执行而不用等待回送的结果返回。当然,当结果产出太快,导致临时队列被充满,也会使得测试线程阻塞,直到队列中一些数据排空。该模式可以用来削平采样信息的网络波峰。通过执行机JMeter的属性asynch.batch.queue.size?(默认100)进行队列大小配置。

10)StrippedAsynch:在响应数据中删除成功采样,再使用Asynch模式。

11)自定义:通过配置一个特定的Java类,可以配置自行扩展的发送模式。扩展类必须首先接口SampleSender,并且实现接收一个具有RemoteSampleListener类型变量的构造函数。

上述提到的Stripped类的模式,都会将响应数据中的成功信息进行删除,所以一些依赖前置响应数据的元件会出现问题。这个问题可以通过调整测试脚本得以解决。

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

posted @ 2019-08-08 17:36 51testing 阅读(89) | 评论 (0) | 编辑 收藏
 
严重提醒!骗子都用上AI技术了!你却还不知道啥是人工智能?

近几日,诈骗手法不断翻新,花样百出让我们防不胜防,甚至,有些骗子已经用起了AI技术,真是吓掉了小编的24K金牙……


小编挖了挖全网资料,收集整理主要有以下4种:

1、盗取微信号,AI技术转发微信语音,诈骗

2、提取声音,合成声音,伪造声音,诈骗

3、盗取视频通话信息,AI换脸,实施诈骗

4、筛选网络信息,AI技术锁定目标,诈骗

什么?连骗子都用上AI技术了,你却还在吃瓜……

再说一下,热搜榜霸占了一个月的励志剧《亲爱的热爱的》终于完结撒花。连央视网也公开点名了,其中通过女主佟年让更多的人认识了AI人工智能这一专业领域,甚至有网友表示:


你以为人工智能离我们遥不可及?不,它就在我们身边!

充实你的技能装备

对于人工智能,想必大家应该很了解了,毕竟生活到处都是。

人工智能的核心是什么,只要找到了这个核心就找到了持续学习的方向。人工智能之所以智能的原因在于它是基于大规模数据集的采集分析测试后, 进而有针对性地训练模型且不断优化才能逐渐智能起来的。

所以“数据”就是核心,我们需要从大量数据中采集甄选有效数据进行模型的训练;数据来源于不同的平台系统,“接口”则相当于通道,用来传输这些数据流;在这个信息大爆炸的年代,“安全”无疑是头等大事,根据安全研究中心Ponemon机构对来自美国、英国、德国、澳大利亚、墨西哥和日本6个国家的2,410位IT及网络安全界专家进行调查,大多受访者表示,2019年最担心的网络安全威胁是第三方风险 。

所以甭管“人工智能”对于你来讲是否是一本读不懂的无字天书,将自身的技术装备升级到有能力去了解摸索学习任何新兴产业的水准,才是我们持续学习,不掉队的最终目标。

下面我们就来看一下当前,乃至于未来两三年内你必须具备的技能,我们先假设你是一个出入IT行业的新手(手工功能测试人员),如果你已经在某领域中运筹帷幄了,那么同样可以对号入座看一下,你的技能装备中还缺些什么?

1、语言类

Python持续火热,在原先的web开发,自动化测试脚本开发的层面上,过多地用于大数据处理分析,人工智能应用,其火热程度有增无减。

JAVA属于经久不衰型,相较于python的成长,JAVA的历史地位早已奠定,对于复杂系统平台的架构设计,当仁不让;与此同时在自动化测试领域仅次于python位居第二,但是人家在大数据方面的造诣是不容忽视的,起初大数据的若干组件都是基于JAVA开发而来的。

2、自动化测试

对于致力于从手工测试向自动化测试转型,或者本身就是一名开发人员,想转行做自动化测试的业内人士而言,无论是web还是APP,从UI自动化起步会是个不错的选择,前提还是需要有代码编写基础(Python,JAVA); 

此外代码能力,常见网络协议知识储备,数据分析能力,也直接影响到后续你是否能够承担接口测试的任务, 较之于UI自动化, 接口测试无需关注界面,其可维护性灵活性等性价比更高,这也是为什么接口测试大力提倡和普及的原因。

3、安全渗透测试

根据权威机构调研,目前安全问题80%都发生在数据安全层面上,但是往往企业中只有20%的防护成本运用到系统的安全上,有些甚至根本没有过多考虑安全系数就将产品或系统推出。

数据泄露以及对物联网(IoT)或运营技术(OT)资产的攻击也是当代网络安全系数中的头等大事,安全测试将会是当今及未来测试中的焦点,针对漏洞原理、攻击手段、测试方法的研究从未停止过。

4、大数据

如今再谈大数据,似乎有点老生常谈,毕竟人家已经火了这么多年,近年来的重点在于大数据在各行各业中的应用,然后对于IT圈中闯荡的你来说,去了解大数据的前世今生也许并非必要,但是就冲着大数据在人工智能(AI)中的应用这一点,怎么都得知道核心工作流程的来龙去脉,及其如何应用于AI的。

知其然,才能知其所以然,AI的未来长路漫漫,是全球的主流趋势,无论未来你在IT圈内从事何种职能,势必与之有千丝万缕的关联。

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

posted @ 2019-08-07 18:03 51testing 阅读(94) | 评论 (0) | 编辑 收藏
 
实战篇:如何做好SOAP接口性能测试?

前面我们已经完成了接口的手工以及自动化测试工作任务。但是基于web的应用,经常都要面对大批量用户或大数量的访问及存储问题,所以接口的性能风险也是在测试过程中亟待解决的问题。我们很多的测试人员做过接口测试,也做过性能测试。但是如何把二者结合起来进行一个针对接口的性能测试,这个也是一项新的技术挑战。

所谓“难者不会,会者不难”,所有的技术问题都来源于工作的需求,同时也要落实到工作问题的解决上。此次和大家主要结合一款开源的性能测试工具Locust来完成接口性能测试的工作任务。

之所以选择Locust工具,原因主要有:
1)开源工具,大家可以随时进行应用,不用花费昂贵的代价;
2)支持Python语言,使用高效快捷;
3)能构造任意数量的并发用户,不受licences限制,可以进行大规模的并发压测。

那么如何完成SOAP接口性能测试实战?拆解成一下,要完成的工作任务如下:

1、SOAP接口测试脚本(实现方式二)
(1)Request对象方式进行Soap接口的测试思路分析
(2)以Request对象发送请求的方式进行Soap接口测试脚本的研发

2、Locust性能测试框架原理分析及soap接口性能测试脚本研发
(1)Locust性能测试框架结构组成分析
(2)使用Locust进行性能测试试验
(3)Locust编写Soap接口性能测试脚本V1.0版本:快速跑通接口业务
(4)Locust编写Soap接口性能测试脚本V2.0版本:测试数据参数化
(5)Locust编写Soap接口性能测试脚本V3.0版本:测试脚本与测试数据相分离

3、Locust性能测试指标分析
(1)Statistics模块数据分析
(2)Locust对应的Charts图表分析
(3)测试失败Failures分析

>>【直播预告】

和软件测试大佬一起玩转《SOAP接口性能测试实战》。学完可以独立接手性能测试的任务~

课程主题:SOAP接口性能测试实战

直播时间:8月8日 19:00-20:30

参与方式:加小姐姐微信atstudy-51,备注“8.8”,或者用微信扫一扫海报即可

>>查看课程详细 http://www.atstudy.com/course/1816

posted @ 2019-08-06 11:05 51testing 阅读(104) | 评论 (0) | 编辑 收藏
 
我是如何从测试开发做到年薪50万的?揭秘测试开发工程师成神之路

入行测开,马上就要5年了。创业公司待过,大公司也待过,工作这一路走来,一些心得,转变,职场体会,早就想写出来分享一下。这个历程包含了技术的提升,工程师的素养和对这个行业的点滴感悟。

自动化测试vs测试开发

记得刚入行那会,我的title是自动化测试工程师。那时对这两者的区别还没那么明显,面试时候两者的问题也都比较类似。当时招聘“会写代码的测试人员”比较偏向称之为“自动化测试工程师”;不过现在很多企业的招聘都变为“测试开发工程师”了。

究其概念,其实自动化测试工程师更偏向于业务方向的效率提升;而测试开发则更偏向于基础架构方向的效率提升。打个简单的比方,测试开发工程师产出的框架可以认为是父类,自动化测试工程师按业务线不同,可以理解是继承自父类的不同子类。


测试开发到底在做什么?

测试开发,最早起源于《Google软件测试之道》这本书,里面第一次提出了SET(Software Engineer in Test)。不过不同的公司称谓也不一样,像国内很多时候还是统称为QA。

那么SET具体在做什么呢?在我看来,SET偏向于测试部门的基础架构开发和流程的设定,比如前面说到的自动化底层框架搭建,或者改写一些开源的类和方法,去提供给组内其他的测试人员使用;再比如,我们所熟知的CICD,单元测试or集成测试的覆盖率统计,以及自动化部署发布的脚本,都可以归到测开的工作范畴里;还有,我们常说测试也需要新技术的引入,现在常见的Docker跟k8s也在逐渐普及到测试团队,因为测试最大的一个障碍是“测试环境众多”,而容器化可以很好的解决这一点。

当然不同的公司情况多有差异。一般来说,越是大型的企业,它的测试流程越规范,测开的作用也就越明显,对应的产品测试效率,也就越高。

质量保障的终极任务

我相信现在很多测试工程师,其实都有足够的共鸣,就是“我们不是测bug的,我们是产品的质量保障员”。但是很多不成熟的企业和团队还是会有误区。比如,bug数目确实可以代表你工作的产出,但如果你的团队或领导把bug数目作为唯一指标,我觉得你是时候考虑跳槽了。质量保障,在我看来涵盖很多东西,是一个很庞大的概念,大概可以包括四点:

1.正确的流程

现在很多都是敏捷开发模式了。在需求评审阶段,测试同学参与并对需求or产品有一定的理解和初步的测试计划

2.基础的质量

开发代码的规范度,基础代码的走查,监督单测覆盖率的稳步提升,毕竟基础决定上层

3.业务的覆盖

确切可以拆分成服务接口的测试/前端UI测试/性能测试/稳定性测试/系统集成测试/回归测试,这一点可以说是测试同学交叉最多的地方。

4.产品终端的保证

协同制定灰度发布策略/规范线上的操作/了解用户使用过程中常见的风险点/制定止损策略

简单来说,测试保障质量,质量决定产品。测试应该是对需求,对产品逻辑最最了解的那个角色。所以,只要关于产品变更的,测试同学都应该下意识去跟进。

而以上的任何一点,都可以深究,去做的更好。

工程师文化

我相信再牛逼的测试开发,也要从业务抓起,你不了解业务,不了解一些开发代码或者的话,有些东西也是扯淡。业务测试在我看来一点都不low,反而是一个很考验人的事情。不管是测试工程师也好,测试开发也好,我们都是工程师,都服务于产品。既是工程师,就该有工程师的素养,我认为完成一个好的测试任务,大概需要同时做到以下几点:

1.对测试结果负责

我们是产品的最后一道关卡,我们对产品发布与否有绝对的话语权,同时,我们也要对自己的测试结果负责。

2.测试到最终场景

现在很多产品链路都很长,这就需要测试同学主动去塑造自己产品的大局观,而不局限在某个单元的测试,不考虑全局,有时会造成致命的线上灾难。

3.对日志敏感,能够精准定位问题

如果开发流程足够规范的话,有完整的日志系统,其实定位问题并不难;我们每发现一个bug,都可以尝试去追溯它的根源,时间久了,你会对工程代码或逻辑摸的很清楚,这对你接下来的测试工作简直如虎添翼。

4.对相似问题和漏洞的归纳

不管是前方客户的问题,PM发现的问题还是自己的bug库,经常归纳可以节省很多时间,会让你对自己的工作产生一种“直觉”,但这种直觉有时很准哦。

面对不同的产品该怎么办?

开发技术或框架可能是通用的,但测试可能会随着产品形态而产生“独特”的调整,我称之为“测试形态”。比如,现在的人工智能测试,因为每次模型迭代,测试所需的数据量很大,你用传统的并发去请求可能就不行,那你可能就需要学一些分布式技术;再有就是云服务测试,这种绝大部分是纯后端服务测试,或者SDK测试,没有前端去assert你的预期,那么你就需要足够熟悉curl命令,网络命令等,甚至去生成一些shell脚本,来执行你的测试请求;还比如手机端的测试,那它的兼容和稳定性呢怎么保证,则又是一门学问;最后还有比较火的智能硬件,盒子啊TV啊这些,怎么保证它的质量,则又是另一种路子。

但,归根结底:测试思想不会变,以不变应万变。

总结:

测试是一门大学问,它入门门槛并不高,但是越深入,你发现自己了解的越少。作为一个职场人员,不随业务转变而转变,有自己的沉淀和技术底子,才能更长久。而测试开发这个行业,鄙人认为未来也会愈加重要,它是衔接产品/测试/开发的一根纽带,它在背后默默支撑着整个测试体系有条不紊的进行,某种程度上说, 算是一个隐者吧。

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

posted @ 2019-08-05 17:42 51testing 阅读(119) | 评论 (0) | 编辑 收藏
 
一小时入门Python爬虫,连我都会了!Python爬取租房数据实例

一、什么叫爬虫

爬虫,又名“网络爬虫”,就是能够自动访问互联网并将网站内容下载下来的程序。它也是搜索引擎的基础,像百度和GOOGLE都是凭借强大的网络爬虫,来检索海量的互联网信息的然后存储到云端,为网友提供优质的搜索服务的。

二、爬虫有什么用

你可能会说,除了做搜索引擎的公司,学爬虫有什么用呢?哈哈,总算有人问到点子上了。打个比方吧:企业A建了个用户论坛,很多用户在论坛上留言讲自己的使用体验等等。现在A需要了解用户需求,分析用户偏好,为下一轮产品迭代更新做准备。那么数据如何获取,当然是需要爬虫软件从论坛上获取咯。所以除了百度、GOOGLE之外,很多企业都在高薪招聘爬虫工程师。你到任何招聘网站上搜“爬虫工程师”看看岗位数量和薪资范围就懂爬虫有多热门了。


三、爬虫的原理

发起请求:通过HTTP协议向目标站点发送请求(一个request),然后等待目标站点服务器的响应。

获取响应内容:如果服务器能正常响应,会得到一个Response。Response的内容便是所要获取的页面内容,响应的内容可能有HTML,Json串,二进制数据(如图片视频)等等。

解析内容:得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析;可能是Json,可以直接转为Json对象解析;可能是二进制数据,可以做保存或者进一步的处理。

保存数据:数据解析完成后,将保存下来。既可以存为文本文档、可以存到数据库中。

四、Python爬虫实例

前面介绍了爬虫的定义、作用、原理等信息,相信有不少小伙伴已经开始对爬虫感兴趣了,准备跃跃欲试呢。那现在就来上“干货”,直接贴上一段简单Python爬虫的代码:

1.前期准备工作:安装Python环境、安装PYCHARM软件、安装MYSQL数据库、新建数据库exam、在exam中建一张用于存放爬虫结果的表格house [SQL语句:create table house(price varchar(88),unit varchar(88),area varchar(88));]

2.爬虫的目标:爬取某租房网上首页中所有链接里的房源的价格、单位及面积,然后将爬虫结构存到数据库中。

3.爬虫源代码:如下

import requests #请求 URL 页面内容

from bs4 import BeautifulSoup #获取页面元素

import pymysql #链接数据库

import time #时间函数

import lxml #解析库(支持 HTML\XML 解析,支持 XPATH 解析)

#get_page 函数作用:通过 requests 的 get 方法得到 url 链接的内容,再整合成BeautifulSoup 可以处理的格式

def get_page(url):

response = requests.get(url)

soup = BeautifulSoup(response.text, 'lxml')

return soup

#get_links 函数的作用:获取列表页所有租房链接

def get_links(link_url):

soup = get_page(link_url)

links_div = soup.find_all('div',class_="pic-panel")

links=[div.a.get('href') for div in links_div]

return links

#get_house_info 函数作用是:获取某一个租房页面的信息:价格、单位、面积等

def get_house_info(house_url):

soup = get_page(house_url)

price =soup.find('span',class_='total').text

unit = soup.find('span',class_='unit').text.strip()

area = 'test' #这里 area 字段我们自定义一个 test 做测试

info = {

'价格':price,

'单位':unit,

'面积':area

}

return info

#数据库的配置信息写到字典

DataBase ={

'host': '127.0.0.1',

'database': 'exam',

'user' : 'root',

'password' : 'root',

'charset' :'utf8mb4'}

#链接数据库

def get_db(setting):

return pymysql.connect(**setting)

#向数据库插入爬虫得到的数据

def insert(db,house):

values = "'{}',"*2 + "'{}'"

sql_values = values.format(house['价格'],house['单位'],house['面积'])

sql ="""

insert into house(price,unit,area) values({})

""".format(sql_values)

cursor = db.cursor()

cursor.execute(sql)

db.commit()

#主程序流程:1.连接数据库 2.得到各个房源信息的 URL 列表 3.FOR 循环从第一个 URL 开始获取房源具体信息(价格等)4.一条一条地插入数据库

db = get_db(DataBase)

links = get_links('https://bj.lianjia.com/zufang/')

for link in links:

time.sleep(2)

house = get_house_info(link)

insert(db,house)

首先,“工欲善其事必先利其器”,用 Python 写爬虫程序也是一样的道理,写爬虫过程中需要导入各种库文件,正是这些及其有用的库文件帮我们完成了爬虫的大部分工作,我们只需要调取相关的借口函数即可。导入的格式就是 import 库文件名。这里要注意的是在 PYCHARM 里安装库文件,可以通过光标放在库文件名称上,同时按ctrl+alt 键的方式来安装,也可以通过命令行(Pip install 库文件名)的方式安装,如果安装失败或者没有安装,那么后续爬虫程序肯定会报错的。在这段代码里,程序前五行都是导入相关的库文件:requests 用于请求 URL 页面内容;BeautifulSoup 用来解析页面元素;pymysql 用于连接数据库;time 包含各种时间函数;lxml 是一个解析库,用于解析 HTML、XML 格式的文件,同时它也支持 XPATH 解析。

其次,我们从代码最后的主程序开始看整个爬虫流程:

通过 get_db 函数连接数据库。再深入到 get_db 函数内部,可以看到是通过调用Pymysql 的 connect 函数来实现数据库的连接的,这里**seting 是 Python 收集关键字参数的一种方式,我们把数据库的连接信息写到一个字典 DataBase 里了,将字典里的信息传给 connect 做实参。

通过 get_links 函数,获取链家网租房首页的所有房源的链接。所有房源的链接以列表形式存在 Links 里。get_links 函数先通过 requests 请求得到链家网首页页面的内容,再通过 BeautifuSoup 的接口来整理内容的格式,变成它可以处理的格式。最后通过电泳find_all 函数找到所有包含图片的 div 样式,再通过一个 for 循环来获得所有 div 样式里包含的超链接页签(a)的内容(也就是 href 属性的内容),所有超链接都存放在列表links 中。

通过 FOR 循环,来遍历 links 中的所有链接(比如其中一个链接是:https://bj.lianjia.com/zufang/101101570737.html)

用和 2)同样的方法,通过使用 find 函数进行元素定位获得 3)中链接里的价格、单位、面积信息,将这些信息写到一个字典 Info 里面。

调用 insert 函数将某一个链接里得到的 Info 信息写入数据库的 house 表中去。深入到 insert 函数内部,我们可以知道它是通过数据库的游标函数 cursor()来执行一段 SQL语句然后数据库进行 commit 操作来实现响应功能。这里 SQL 语句的写法比较特殊,用到了 format 函数来进行格式化,这样做是为了便于函数的复用。

最后,运行一下爬虫代码,可以看到链家网的首页所有房源的信息都写入到数据里了。(注:test 是我手动指定的测试字符串)


后记:其实 Python 爬虫并不难,熟悉整个爬虫流程之后,就是一些细节问题需要注意,比如如何获取页面元素、如何构建 SQL 语句等等。遇到问题不要慌,看 IDE 的提示就可以一个个地消灭 BUG,最终得到我们预期的结构。

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

posted @ 2019-08-02 17:57 51testing 阅读(126) | 评论 (0) | 编辑 收藏
 
仅列出标题
共55页: 1 2 3 4 5 6 7 8 9 Last