前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试驱动之一个登录引发的思考与总结(七)

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

作者头像
无涯WuYa
发布2018-10-25 16:18:15
4090
发布2018-10-25 16:18:15
举报

测试驱动开发模式在今天已经不是什么新鲜事了,它要求开发在写业务代码的时候,先写出测试代码,,同时单元测试例子决定了如何来写产品的代码,并且不断的成功的执行编写的所有的单元测试例子,不断的完善单元测试例子进而完善产品代码,这样随着功能的开发完成,测试代码也会对应的完成,很显然,这是一个全新的开发模式,在一定程度上,可以完全的提高软件的质量,以及开发可以对自己写的代码进行一个全面的评估和测试。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模块的安装以及使用方法,来继续重构我们的测试代码。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档