测试驱动之一个登录引发的思考与总结(七)

测试驱动开发模式在今天已经不是什么新鲜事了,它要求开发在写业务代码的时候,先写出测试代码,,同时单元测试例子决定了如何来写产品的代码,并且不断的成功的执行编写的所有的单元测试例子,不断的完善单元测试例子进而完善产品代码,这样随着功能的开发完成,测试代码也会对应的完成,很显然,这是一个全新的开发模式,在一定程度上,可以完全的提高软件的质量,以及开发可以对自己写的代码进行一个全面的评估和测试。TDD模式是一个很大的概念,在这里,我仅仅介绍下测试驱动与自动化的融合以及精简自动化的测试代码,仅仅达到这个目的而已。对TDD开发模式感兴趣的同学,可以查看其有关的资料。

一、一个登录引发的思考

已登录V客网为例,登录成功后,验证用户昵称是否正确,然后退出系,这样的一个过程,来说明精简代码的第一步,最原始的代码见如下:

#coding:utf-8

import unittest

from selenium import webdriver

class developTest(unittest.TestCase):

def setUp(self):

self.driver=webdriver.Firefox()

self.driver.implicitly_wait(30)

self.driver.maximize_window()

self.driver.get('http://my.weke.com/login.html')

self.addCleanup(self.driver.quit)

def testLogin(self):

#用户名输入

name=self.driver.find_element_by_id('l-1')

name.clear()

name.send_keys('yourName')

#密码输入

passwd=self.driver.find_element_by_id('l-2')

passwd.clear()

passwd.send_keys('yourPassword')

#点击登录

self.driver.find_element_by_id('l-4').click()

#获取到用户昵称

userName=self.driver.find_element_by_xpath(".//*[@id='user-info']/a/span")

userInfo=userName.text

#退出系统

userName.click()

self.driver.find_element_by_xpath(".//*[@id='user-info']/ul/li[3]/a").click()

self.assertTrue(userInfo in 'linux')

if __name__=='__main__':

unittest.main(verbosity=2)

如上的代码,我们成功的实现了登录V客网,获取到用户的昵称,退出系统,以及验证用户昵称这样的一个过程,但是问题也就来了,如果我登录系统N次以及退出系统次,那么就意味着写登录退出就得N次,很明显,这样很多的登录退出的代码都是一致的,增加了工作量,如下,我通过把登录,退出,获取到用户昵称,写成一个单独的函数,然后使用到了直接调用对应的函数(调用的时候记得导入),文件名称是vke.py,具体代码为如下:

#coding:utf-8

#登录函数

deflogin(driver,username='13484545195',password='server'):

driver.find_element_by_id('l-1').send_keys(username)

driver.find_element_by_id('l-2').send_keys(password)

driver.find_element_by_id('l-4').click()

#获取用户昵称

def getName(driver):

returndriver.find_element_by_xpath(".//*[@id='user-info']/a/span").text

#退出系统

def exitSystem(driver):

driver.find_element_by_xpath(".//*[@id='user-info']/a/span").click()

driver.find_element_by_xpath(".//*[@id='user-info']/ul/li[3]/a").click()

有了如上的函数后,测试脚本就精简很多了,测试脚本见如下:

#coding:utf-8

importunittest

fromselenium import webdriver

import vke

classdevelopTest(unittest.TestCase):

def setUp(self):

self.driver=webdriver.Firefox()

self.driver.implicitly_wait(30)

self.driver.maximize_window()

self.driver.get('http://my.weke.com/login.html')

self.addCleanup(self.driver.quit)

def testLogin(self):

vke.login(self.driver)

userInfo=vke.getName(self.driver)

vke.exitSystem(self.driver)

self.assertTrue(userInfo in 'linux')

if__name__=='__main__':

unittest.main(verbosity=2)

通过这样的一个实例,我们把测试脚本精简了很多,其实还可以把最后一步精简下,但是我一般感觉,最后一步还是在测试代码中比较好,因此我们可以总结出如下几点:

1、对于某些公用的功能,如登录,退出,单独写成一个函数,需要的时候,直接调用函数;

2、验证点一定要写在最后一步,本实例验证用户昵称部分,不可以写在退出之前验证,先获取到用户昵称,退出系统,再验证用户昵称;

3、尽量保持测试脚本与页面对象元素分离开,这样即使系统需求变更或者开发把页面元素更改了,我们只在一个地方维护,而不影响testcase的脚本。

虽然我们实现了把测试用例的代码精简化,实现了测试脚本与页面对象的分离,实现了后期维护页面对象只在一个地方维护,但是还是存在很多的缺点,我们可不可以把使用到的数据,页面对象放在如.csv.xml文件中了?答案当然是可以,下来部分我们重点介绍把使用到的数据放在.txt,.csv,.xlsx,xml文件中,同时介绍ddt模块的安装以及使用方法,来继续重构我们的测试代码。

原文发布于微信公众号 - Python自动化测试(wuya-python)

原文发表时间:2015-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MelonTeam专栏

开发中容易忽略和挖坑的场景总结

总结代码设计时容易忽略的场景,需求启动阶段就考虑好各个场景,可以提高代码的健壮性,有效减少bug数。

26660
来自专栏james大数据架构

Eclipse快捷键大全

一、实用类快捷键 1 常用熟悉的快捷键 CTRL+C(复制)、CTRL+X(剪切)、CTRL+Z(撤销)、CTRL+F(查找)、CTRL+H(搜索文件或字符串)...

220100
来自专栏君赏技术博客

团队自用的iOS CSV多语言工具今天终于发布1.0.0版本

image-20180727105818718 一般第一个为基础语言包不需要处理

25240
来自专栏程序猿DD

我最常用的Intellij IDEA快捷键

原文:http://www.radcortez.com/my-most-useful-intellij-idea-keyboard-shortcuts/ 译文:...

25380
来自专栏互联网杂技

【小教程】教你拿出app中的图片资源

有一种方法通过ipa或apk包来获得每个资源的切图,今天就来简单介绍下。因为有的同学还不知道这个方法,尤其是没有技术背景的同学(我司UI妹子得知这个方法如获至宝...

30750
来自专栏三流程序员的挣扎

Flutter 学习记1 - Mac 下的安装配置

网上搜到一篇文章安装cocoapods遇到error: RPC failed; curl 56 SSLRead() return error -36问题,不知道...

1.1K30
来自专栏为数不多的Android技巧

mac下自动切换输入法

长久以来,输入法一直是困扰mac用户的一个问题;不过随着国内厂商的跟进,这种状况得到了极大的改善。不用自己去折腾什么鼠须管了,狼厂和企鹅都做的不错。

65210

Eclipse的BIRT:使用Design Engine API

假设您已经在名为“customers”的报告设计文件中将表格定义为报告项目。顾名思义,该表格用于显示示例数据库中的所有客户。此外,它还有一个用于按照国家来对项目...

35920
来自专栏Youngxj

[黑客工具箱]Android手机抓包工具

7.3K40
来自专栏HaHack

jQuery-based Local Search Engine for Hexo

12840

扫码关注云+社区

领取腾讯云代金券