运用自动化测试脚本,测试下CSDN的登录功能模块

news2025/2/24 15:29:16

目录

前言

python程序目录

账号密码登录模块

测试用例执行模块

运行结果示例


前言

自动化测试的重要性越来越受到人们的重视,因为它可以提高测试效率、降低测试成本并减少人为错误的出现。为了满足这个需求,越来越多的公司开始采用自动化测试来保证软件质量。

仅仅是针对CSDN账号密码登录这一小块的自动化测试;测试用例考虑的不是非常周全,仅图一乐

因为用例比较少,所以没有用自己封装的seleniumAPI,这样看着比较方便一些

python程序目录

HTMLTestRunner需要下载,不能用pip安装。

账号密码登录模块

CSDN登录-账号密码登录的功能

#!/usr/bin/python3
# _*_coding=utf-8 _*_
# @author junwei
# @date 2021/2/28 21:21
# description 测试CSDN的账号密码登录模块
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
# 登录模块
class Login(object):
    # 创建浏览器对象
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(2)
        self.driver.maximize_window()
    def login_csdn(self, userName, pwd):
        # 进入使用账号密码登录的页面
        url = "https://passport.csdn.net/login?code=public"
        self.driver.get(url)
        self.driver.implicitly_wait(2)
        self.driver.find_element_by_css_selector(
            "#app > div > div > div.main > div.main-login > div.main-select > ul > li:nth-child(2) > a").click()
        # 输入用户名
        self.driver.find_element_by_id("all").send_keys(userName)
        # 输入密码
        self.driver.implicitly_wait(2)
        self.driver.find_element_by_id("password-number").send_keys(pwd)
        if self.is_button_enable() is True:
            self.driver.find_element_by_css_selector(
                "#app > div > div > div.main > div.main-login > div.main-process-login > div > div:nth-child(6) > div > button").click()
        else:
            return "warning:login button disabled"
    # 判断登录按钮是否可有效
    def is_button_enable(self):
        is_enable = self.driver.find_element_by_css_selector(
            "#app > div > div > div.main > div.main-login > div.main-process-login > div > div:nth-child(6) > div > button").is_enabled()
        return is_enable
    # 判断是否登录成功
    def is_login(self):
        ActionChains(self.driver).move_to_element(self.driver.find_element_by_css_selector(
            "#csdn-toolbar > div > div > div.toolbar-container-right > div > div.toolbar-btn.toolbar-btn-login.csdn-toolbar-fl.toolbar-subMenu-box > a > img")).perform()
        self.driver.implicitly_wait(2)
        nick_name = self.driver.find_element_by_class_name("csdn-profile-nickName")
        if nick_name is not None:
            return True
        else:
            return False
    # 获取提示信息
    def get_msg(self):
        # self.driver.implicitly_wait(2)
        time.sleep(2)  # 需要强制等待
        return self.driver.find_element_by_id("js_err_dom").text  # 1.用户名或密码错误 2.长时间未修改密码,请通过"忘记密码"修改密码后登录 3.用户唯一标识不能为空
    def __del__(self):
        time.sleep(2)
        self.driver.close()
if __name__ == '__main__':
    login = Login()
    login.login_csdn("", "s")
    print(login.is_button_enable())
    print(login.get_msg())
    # print(login.is_login())

测试用例执行模块

6条测试用例&运行unittest

#!/usr/bin/python3
# _*_coding=utf-8 _*_
# @author junwei
# @date 2021/2/28 21:22
# description 测试用例
import unittest
from unittest_selenium.CSDNFunction.login import Login
from unittest_selenium.HTMLTestRunner import HTMLTestRunner
class MyTestCase(unittest.TestCase):
    def setUp(self) -> None:
        print("当前用例执行开始")
    def tearDown(self) -> None:
        print("当前用例执行结束")
    # 测试用例001:账号密码正确,登录成功
    def test_001(self):
        login = Login()
        login.login_csdn("correctName", "correctPwd")
        is_login = login.is_login()
        self.assertEqual(True, is_login)
    # 测试用例002:不输入用户名和密码
    def test_002(self):
        login = Login()
        login.login_csdn("", "")
        is_button_enable = login.is_button_enable()
        self.assertEqual(False, is_button_enable)
    # 测试用例003:输入用户名,密码为空,登录按钮无法点击
    def test_003(self):
        login = Login()
        login.login_csdn("testUser", "")
        is_button_enable = login.is_button_enable()
        self.assertEqual(False, is_button_enable)
    # 测试用例004:输入密码,用户名为空,点击登录
    def test_004(self):
        login = Login()
        login.login_csdn("", "testPwd")
        msg = login.get_msg()
        self.assertEqual("用户唯一标识不能为空", msg)
    # 测试用例005:输入正确的用户名和错误的密码,点击登录
    def test_005(self):
        login = Login()
        login.login_csdn("correctName", "testPwd")
        msg = login.get_msg()
        self.assertEqual("用户名或密码错误", msg)
    # 测试用例006:假设已知账号A长时间未登录,输入账号名A及密码
    def test_006(self):
        login = Login()
        login.login_csdn("1", "testPwd")
        msg = login.get_msg()
        self.assertEqual('长时间未修改密码,请通过"忘记密码"修改密码后登录', msg)
if __name__ == '__main__':
    # unittest.main()
    # # 测试用例列表
    # case_list = ['test_001', 'test_002', 'test_003', 'test_004', 'test_005', 'test_006']
    # # 创建测试套件
    # suit = unittest.TestSuite()
    # # 将测试用例添加到测试套件中
    # for case in case_list:
    #     suit.addTest(MyTestCase(case))
    # 添加全部测试用例
    suit = unittest.makeSuite(MyTestCase)
    # 执行测试,verbosity=2指定为每个测试用例生成报告,run中传入要执行的测试套件
    unittest.TextTestRunner(verbosity=2).run(suit)
    # # 使用HTMLTestRunner生成HTML格式的测试报告
    # with open('report.html', 'wb') as f:
    #     HTMLTestRunner(stream=f, title="测试报告标题", description="测试报告描述信息", verbosity=2).run(suit)

运行结果示例

第一条用例失败是因为没有给正确的账号密码

 

作为一位过来人也是希望大家少走一些弯路,(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可:【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N4P3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=1MDs4T0SvhL4arRoq3njIVb9HGXrRoj6&authKey=sx1h5dj77OV5obrcx6nE7Dn3sqEVuE4XrGqzqneReBJy3ojOL3oHMSH48XPKPWhW&noverify=0&group_code=574737577

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目跑不起来

Sa-Token/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempUtil.java:10:8 java: 写入cn.dev33.satoken.temp.SaTempUtil时出错: Output directory is not specified 写入cn.dev33.satoken.temp.SaTempUtil时出错: Output directory is not specified 答案&#xf…

c++的概述

c是面向对象、泛型编程。 1、 第一个c程序&#xff1a; #include <iostream>using namespace std;int main(int argc, char *argv[]) {//cout代表终端输出设备 endl换行cout << "Hello World! " << endl;cout << 100 << endl;std:…

Element-Plus el-upload组件批量上传图片问题记录

上传图片组件踩坑记录 1. 第一次尝试 最初的写法如下&#xff0c;在本地跑的时候每上传一张图片调一次接口&#xff0c;虽然图片回显正常了&#xff0c;但是每次都会自动多调一个如下图所示的apply-login 报错404&#xff0c;部署到测试环境后&#xff0c;就是每次都报错&…

linux(信号产生中)代码来验证

我们应该如何理解我们调用系统接口并不是简单的调用系统接口这么简单就完事了---我们有时候也是需要使用由操作系统为我们提供的操作系统的层面的数据类型 sigset_t 我们来介绍一种类型&#xff0c;从我们之前学的图来看&#xff0c;每一个信号不管是在block表还是在pending表…

鄂尔多斯市政务协同办公平台,让全市政务更协同高效

近年来&#xff0c;国家高度重视数字政务建设&#xff0c;以数字化推进国家治理体系和治理能力现代化&#xff0c;助力建设人民满意的服务型政府。 2018年&#xff0c;国务院办公厅印发《进一步深化“互联网政务服务”推进政务服务“一网、一门、一次”改革实施方案》&#xf…

这份阿里巴巴内部Spring Cloud Alibaba全套笔记,几乎涵盖了所有操作

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案&#xff0c;是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 Springcloud 和 Srpingcloud Alibaba 区别&#xff1f; SpringCloud&#xff1a; 部分组件停止维护和更新&#xff0c;给开发带来不便;SpringCl…

缓存数据一致性探究

缓存是一种较低成本提升系统性能的方式&#xff0c;自它面世第一天起就备受广大开发者的喜爱。然而正如《人月神话》中的那句经典的“没有银弹”中所说&#xff0c;软件工程的设计没有银弹。 就像每一次发布上线修复问题的同时&#xff0c;也极易引入新的问题&#xff0c;自缓存…

一文让你明白软件测试该怎样入门?

我认为入门软件测试需要四个方面的知识or技能&#xff0c;它们是&#xff1a;业务知识、职业素养、基础知识、技术知识。 职业素养是一切的根基&#xff0c;因为人在职场就必须拥有必要的职业素养&#xff0c;软件测试工程师也不例外。基础知识和技术知识是两大支柱&#xff0…

【正点原子STM32连载】 第二十九章 DMA实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十…

第26节:cesium 高程数据下载(含源码+视频)

本节主要讲解高程dem数据下载方式 下载网址1: http://srtm.csi.cgiar.org/download 下载较慢,含全球高程数据 下载网站2:地理空间数据云 下载速度快,中国科学院计算机网络信息中心公布数据,正式可靠 下面主要介绍地理空间数据云的下载方式。 1.登录 2.选择高级检索 3.选择数…

【改进的多同步挤压变换】基于改进多同步挤压的高分辨率时频分析工具,用于分析非平稳信号(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

一份配置轻松搞定表单渲染,配置式表单渲染器在袋鼠云的实现思路与实践

前段时间&#xff0c;袋鼠云离线开发产品接到改造数据同步表单的需求。 一方面&#xff0c;数据同步模块的代码可读性和可维护性较差&#xff0c;导致在数据同步模块开发新功能和定位问题的效率很低。另一方面&#xff0c;整体规划上&#xff0c;希望在对接新的数据源时&…

Mac版好用虚拟机CrossOver22.1.1,耗时时间少,加快办事效率

Mac系统仅适配自己的硬件&#xff0c;它的软件需要通过app store购买&#xff0c;所以很多Mac用户也为之烦恼。这种模式优点是稳定性与性能超强发挥&#xff0c;缺点也显而易见。 那该如何解决这一困扰呢&#xff1f;一般&#xff0c;我们会选择安装虚拟机软件&#xff0c;但这…

本地使用AutoML-nni进行超参数调优实验

目的&#xff1a;在自己的代码中NNI工具&#xff0c;进行超参数自动调优训练自己的项目&#xff0c;得到精度最高的一组超参数。 nni地址&#xff1a; GitHub - microsoft/nni: An open source AutoML toolkit for automate machine learning lifecycle, including feature e…

短视频矩阵视频智能剪辑源代码.源代码

短视频矩阵视频智能剪辑&#xff1a; * 添加/编辑视频 */ public function addVideoAction(){ $this->useLayout(dydqtshoppc-head.html); $id $this->request->getIntParam(id); //获取视频信息 $Video_model new App_Mod…

c++包管理器,不用每次都源码编译

pkg-config linux中的包管理器 例如opencv.pc文件&#xff0c;详细描述了库的使用依赖。cmake的find_package支持pc文件的查找 prefix/usr/local exec_prefix${prefix} includedir/usr/local/include libdir/usr/local/libName: OpenCV Description: Open Source Computer Vi…

矿工挖宝-第14届蓝桥杯国赛Scratch真题初中级组第4题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第146讲。 矿工挖宝&#xff0c;本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第4题&…

MySQL(进阶篇3.0)

锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算机资源&#xff08;CPU、RAM、I/O&#xff09;的争用之外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&…

十五、实例化

第一部分 概念&#xff1a; 1&#xff09;引入 OpenGL ES 实例化&#xff08;Instancing&#xff09;是一种只调用一次渲染函数就能绘制出很多物体的技术&#xff0c;可以实现将数据一次性发送给 GPU &#xff0c;告诉 OpenGL ES 使用一个绘制函数&#xff0c;将这些数据绘制…

练习:有限状态机测试

练习&#xff1a;有限状态机测试 1 FSM 示例 在练习中&#xff0c;我们将使用两个 FSM。 两者都有输入字母 X {a, b} 和输出字母 Y {0,1}。 第一个 FSM 将称为 M1 并由以下有向图表示。 对于上面给出的每个 FSM Mi&#xff1a; 1.确定以下值&#xff0c;显示您的工作。 (a…