51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 543|回复: 0
打印 上一主题 下一主题

[转贴] 使用selenium测试自己项目的登录界面

[复制链接]
  • TA的每日心情
    无聊
    前天 09:06
  • 签到天数: 941 天

    连续签到: 3 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-7-8 10:18:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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;
      · 多平台支持:Linux、Windows、MAC;
      · 多语言支持:Java、Python、Ruby、C#、JavaScript、C++;
      · 对…出页面有良好的支持;
      · 简单(API简单)、灵活(用开发语言驱动> ;
      · 支持分布式测试用例执行;
      使用selenium测试博客园cnblogs的登录界面:
      一:功能测试
    1.用户名为空 或 用户名密码均为空;
      2.用户名或密码错误;
      3.用户名存在、密码为空;
      4.用户名和密码均正确。
      步骤:
      (一)登录方法
         1.把输入账号、输入密码、点击登录按钮三个步骤写成一个方法;
         2.然后把输入的账号和密码参数化。

    1. import unittest
    2.   import selenium
    3.   from selenium.webdriver.common.by import By
    4.   from selenium import webdriver
    5.   from time import sleep
    6.   class LoginCase(unittest.TestCase):
    7.        def setUp(self):
    8.           self.dr = webdriver.Chrome()
    9.           self.dr.maximize_window()
    10.        #定义登录方法
    11.        def login(self, username, password):
    12.            self.dr.get('https://')  #登陆页面网址
    13.            self.dr.find_element(By.ID,'u').send_keys(username)  #各网站ID名不同,相同网站也有更新,以实际情况定位
    14.            self.dr.find_element(By.ID,'p').send_keys(password)
    15.            self.dr.find_element(By.ID,'login_button').click()
    复制代码
    (二)用例
         1.下面的用例可以调用前面写的登录方法,这样不用每次都去走登录流程;
         2.判断是否登录成功,我这里是取的登录成功后的账户名。
    1. def test_login_success(self):
    2.            '''用户名、密码正确'''
    3.            self.login('程序猿-007', '0000000000a') #正确用户名和密码
    4.            link = self.dr.find_element(By.ID, 'header_user_left')
    5.            # 用assertTrue(x)方法来断言  bool(x) is True 获取一条只有登陆成功才有的text,用来判断是否真的登陆成功
    6.            self.assertTrue('欢迎你,程序猿-007' in link.text)
    7.            # 截图  可自定义截图后的保存位置和图片命名
    8.            self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_success.png')
    9.        def test_login_pwd_error(self):
    10.            '''用户名正确、密码不正确 或 用户名错误、密码正确'''
    11.            self.login('程序猿-007', '000')  #正确用户名,错误密码
    12.            sleep(10)
    13.            error_message = self.dr.find_element(By.CSS_SELECTOR,'div.error-message').text
    14.            # 用assertIn(a,b)方法来断言 a in b  '用户名或密码错误'在error_message里
    15.            self.assertIn('用户名或密码错误', error_message)
    16.            self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_pwd_error.png')
    17.        def test_login_pwd_null(self):
    18.            '''用户名正确、密码为空'''
    19.            self.login('程序猿-007', '')  #密码为空
    20.            error_message = self.dr.find_element(By.ID,'mat-error-1').text
    21.            # 用assertEqual(a,b)方法来断言  a == b  请输入密码等于error_message
    22.            self.assertEqual(error_message,'请输入密码')
    23.            self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_pwd_null.png')
    24.        def test_login_user_null(self):
    25.            '''用户名为空、密码正确'''
    26.            self.login('', '0000000000a')  #用户名为空,密码正确 或 用户名密码均为空
    27.            error_message = self.dr.find_element(By.ID,'mat-error-0').text
    28.            self.assertEqual(error_message,'请输入登录用户名或邮箱')  #用assertEqual(a,b)方法来断言  a == b
    29.            self.dr.get_screenshot_as_file(r'D:\xiaojunjun\cnblogtest\\login_user_null.png'
    30.        def tearDown(self):
    31.            sleep(2)
    32.            print('自动测试完毕!')
    33.            self.dr.quit()
    34.   if __name__ == '__main__':
    35.       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

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-2 07:05 , Processed in 0.068953 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表