一. 自动化测试两种方式
1. 代码驱动测试
普遍使用测试框架来进行单元测试。
2. 图形用户接口测试
测试框架产生用户接口事件,并捕获事件导致的图形用户接口的改变,以便验证可见的程序响应是否正确。如web自动化测试:selenium和webdriver。
* 自动化测试与人工测试的选择 *
如果用户界面最近发生改变,自动化测试案例面临重构,对于工期较短的项目,有严格的截止时间,并且没有可用的自动化测试案例,选择人工测试最佳。
自动化测试适用于一个长期的迭代测试中,有许多优点:
- 支持频繁的回归测试;
- 在软件开发中尽早发现bug;
- 能够无限地循环执行测试案例;
- 维护周期长;
- 需要在多平台上运行相同的测试案例;
二. 自动化测试架构
1. 数据驱动测试
将测试数据与测试逻辑放在同一个框架中,采用测试数据与测试逻辑分离的方式,当测试数据发生改变时,不会影响测试逻辑。同一个测试逻辑可以针对不同的数据进行测试。提高测试逻辑的使用效率和可维护性。
2. 模块驱动测试
使用独立的脚本测试单独的模块,子功能。引入抽象和封装的原则。
3. 关键字驱动测试(QTP)
创建一些关键字以及相关联的一些方法和函数。然后创建一个函数库,它里面包含一个读取关键字的逻辑,然后调用相关的动作。关键字驱动的自动化测试框架建立在数据驱动手段之上,表中包含指令(关键词),而不只是数据。这些测试被开发成使用关键字的数据表,它们独立于执行测试的自动化工具。关键字驱动的自动化测试是对数据驱动的自动化测试的有效改进和补充。
4. 混合自动化测试
融合了”关键字驱动测试”和“数据驱动测试”。既拥有测试逻辑和测试数据相互分离的优点,又集成了关键字驱动对的先进架构。
5. 基于模型测试
在这种架构下,会有一个成熟的测试模型来描述测试数据的所有方面,以及测试案例和案例的执行环境。
三. 自动化测试基本流程
Paste_Image.png** 对于近阶段的学习,查看书籍和资料,针对“图形用户接口测试”,使用最高60%的自动化,与人工测试相结合的方式,从而提高测试效率。**
四. Selenium及Webdriver
1. selenium介绍
- selenium是用于测试web应用程序用户界面(UI)的框架,是运行端到端测试的工具,可以使用多个编程语言编写测试,如Java ,Python ,Ruby,C#,在我今后的学习工作中,我选择Python语言。selenium可以在多个浏览器中执行这些测试,并且可以使用selenium在自由测试过程中复现bug。
- 目前selenium组件主要包括selenium IDE,selenium 1.x(RC),webdriver,selenium Grid
2. selenium IDE
selenium IDE 提供了一个浏览器插件模式,可以录制和运行脚本,将录制的脚本导出成Java ,Python ,Ruby,C#语言,目前只支持Firefox一种浏览器插件
总结(一):selenium-IDE的命令。
3. selenium RC
通过 selenium RC 的服务器作为代理服务器去访问应用,从而达到测试的目的。
4. Webdriver
提供一个更简单简洁的编程接口以及解决了一些Selenium-RC API 的限制。支持页面不需要重新加载而元素改变的动态页面
Selenium 1 +Webdriver=Selenium 2
对于webdriver API 基本主要的已经学习,能够将一些方法结合具体的web应用,其他的小部分在实际应用当中还是需要查找API文档。
主要包括:
- 定位元素 XPath\CSS 定位
- 控制浏览器(设置浏览器窗口大小、控制浏览器前进 后退、模拟浏览器刷新)
- 简单元素操作(返回元素的尺寸、获取元素的文本、获得属性值、设置该元素是否用户可见 等等)
- 鼠标事件
- 键盘事件
- 设置元素等待(显示等待、隐式等待、sleep休眠方法)
- 定位一组元素
- 多表单切换 switch_to.frame()
- 对窗口切换 switch_to.window()
- 警告框处理 switch_to_alert()
5. selenium Grid
支持并发、分布式运行多个测试用例。selenium Grid 可以在不同的主机上建立主节点和分支节点,可以使主节点上的测试用例在不同的分支节点上运行。对不同的节点来说,可以搭建不同的测试环境(操作系统、浏览器),从而使一份测试用例得到不同环境下的执行结果。
考虑在减少成本的情况下,使用浏览器分开执行的策略会好一些。
** 目前我使用的版本是selenium 3.4.0 **
那么selenium 3 相对于selenium 2 有哪些改动和区别呢?
- selenium 3 标准化,并且支持更多的浏览器;
- selenium 3 以开发“一款聚焦于移动和Web APP用户的自动化工具”为目标。selenium 3将会主导开发一个继承于Webdriver API的测试套件,促进许多不同的可用项目间的可操作性用以支持移动终端。
五. unittest单元测试框架
1. 重要概念
Test Case : 一个Test Case 的实例就是一个测试用例
Test Suite : 把多个测试用例集合在一起来执行,这就是Test Suite 测试套件
Test Runner : 执行策略和执行结果
Test Fixture : 对一个测试用例环境的搭建和销毁,就是一个fixture。setUp()通过建立数据库连接来进行初始化;tearDown()清除数据库产生的数据,然后关闭连接。
2. 用例执行的顺序
unittest框架默认根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,a-z,A-Z。
addTest() 指定用例的执行顺序。
3. 跳过测试和预期失败
unittest.skip(reason) ——无条件的跳过装饰的测试,说明跳过测试的原因
unittest.skipIf(condition,reason) ——若条件为真,跳过测试
unittest.skipUnless(condition,reason) —— 条件为真,执行测试
unittest.expectFailure() —— 不管执行结果如何,测试标记为失败
4. fixtures
setUpModule\tearDownModule:在整个模块的开始与结束时被执行
setUpClass\tearDownClass:在测试类的开始与结束时被执行(需要通过@classmethod进行装饰,方法的参数为cls)
setUp\tearDown:在测试用例的开始与结束时被执行
六. HTML测试报告
HTMLTestRunner是python标准库unittest单元测试框架的一个扩展,它生产易于使用的HTML测试报告。
首先需要下载HTMLTestRunner,并修改。
七.python 多线程和多进程
(一)多线程技术
python通过两个标准库thread和threading提供对线程的支持。
应该避免使用thread模块,因为他不支持守护线程,当主线程退出时,所有的子线程不管他们是否还在工作,都会被强行退出。threading模块支持守护线程。
import threading 引入线程模块
threads=[ ] 创建线程数组,用于装载线程
threading.Thread() 通过调用threading模块的Thread()方法来创建线程
创建线程类
Paste_Image.png(二)多进程技术
multiprocessing模块与多线程的threading模块的用法类似, multiprocessing模块可以充分利用硬件的多处理器来进行工作。
八. Git 常用命令
首先,需要明白两个概念:工作区和暂存区
工作区:一个项目文件夹就是一个工作区。
暂存区:工作区有一个隐藏目录 .git ,这个不算工作区,而是git 的版本库。git 的版本库里存了很多东西,其中最重要的就是称为stage(或index)的暂存区,还有git 为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
(一)新建代码库
在当前目录新建一个git 代码库 —— git init
新建一个目录,将其初始化为git 代码库 —— git init [name]
下载一个项目和它的整个代码历史 —— git clone [url]
(二)配置
git 的配置文件为 .gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。
显示当前的git 配置 —— git config --list
编辑git 配置文件 —— git config -e [--global]
设置提交代码时的用户信息 —— git config [--global] user.name "[name]"
—— git config [--global] user.email "[email address]"
(三)增加/删除文件
添加指定文件到暂存区 —— git add [file1] [ file2] ...
添加指定目录到暂存区,包括子目录 —— git add [dir]
添加当前目录的所有文件到暂存区 —— git add .
对于同一个文件的多处变化,可以实现分次提交 —— git add -p
删除工作区文件,并将这次删除放入暂存区 —— git rm [file1] [file2] ...
停止追踪指定文件,但该文件会保留在工作区 —— git rm --cached [file]
改变文件,并且将这个改名放到暂存区 —— git mv [原名] [新名]
(四)代码提交
提交暂存区到仓库 —— git commit -m "描述信息"
提交暂存区的指定文件到仓库 —— git commit [file] -m "描述信息"
提交工作区自上次commit 之后的变化,直接到仓库 —— git commit -a
提交时显示所有diff信息 —— git commit -v
如果代码没有任何新变化,则用来改写上一次提交的信息 —— git commit --amend -m "..."
重新上一次提交,并包括指定文件的新变化 —— git commit --amend [file] ..
(五)分支
列出所有本地分支 —— git branch
列出所有远程分支 —— git branch -r
列出所有本地分支和远程分支 —— git branch -a
新建一个分支,但依然停留在当前分支 —— git branch [name]
新建一个分支,并切换到该分支 —— git checkout -b [name]
新建一个分支,指向指定commit —— git branch [name] [commit]
切换到指定分支,并更新工作区 ——git checkout [name]
切换到上一个分支 —— git checkout -
合并指定分支到当前分支 —— git merge [name]
删除分支 ——git branch -d [name]
删除远程分支 —— git push origin --delete [name]
(六)标签
发布一个版本时,通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
列出所有标签 —— git tag
新建一个tag在当前commit —— git tag [name]
删除本地tag —— git tag -d [name]
删除远程tag —— git push origin :refs/tags/[name]
查看tag信息 —— git show [name]
提交指定tag —— git push [remote] [name]
提交所有tag —— git push [remote] --tags
新建一个分支,指向某个tag —— git checkout -b [branch] [tag]
(七)查看信息
显示有变更的文件 —— git status
显示当前分支的历史版本 —— git log
显示当前分支的最近几次提交 —— git reflog
(八)远程同步
显示所有远程仓库 —— git remote -v
显示某个远程仓库的信息 —— git remote show [remote]
上传本地指定分支到远程仓库 —— git push [remote] [branch]
推送所有分支到远程仓库 —— git push [remote] --all
(九) 撤销
恢复暂存区的指定文件到工作区 —— git checkout [file]
恢复某个commit 的指定文件到暂存区和工作区 —— git checkout [commit] [file]
恢复暂存区的所有文件到工作区 —— git checkout .
生成一个可供发布的压缩包 —— git archive
关于下一阶段的计划,在做好测试工作的基础上,系统的学习python语言,我的python版本:3.5.2,因为我觉得无论学什么,都要从语言入手,并且,我的测试脚本也是python语言,所,以掌握好python对测试至关重要。
网友评论