精华内容
下载资源
问答
  • 自动化手动输入
    千次阅读
    2019-04-26 15:49:17

    shell自动化输入的三种方式:

    • 重定向
    • 管道
    • expect

    前两种的前提是指令需要有参数来指定密码输入方式,具体使用可参考博客:

    https://blog.csdn.net/zhangjikuan/article/details/51105166

    下面讲一下expect方式的使用

    当不想要手动输入时(如:密码),可使用expect来实现脚本自动输入。

    安装:

    yum install expect -y
    

    在shell脚本内使用:

    if [[ "x${use_v2v_local_cmd}" == "xtrue" ]]; then
        if [[ "x${password_file}" != "x" ]]; then
            passwd=`cat ${password_file}`
            expect <<-EOF
            set timeout -1
    
            spawn ${v2v_local_cmd}
            expect {
                "*password*" {
                    send "${passwd}\r"
                    exp_continue
                }
                "*error*" {
                    exit 1
                }
            }
    EOF
        else
            eval ${v2v_local_cmd}
        fi
    fi
    

    这种方式虽好,但是在实际使用中发现了一个限制

    ​ 传入的命令不能带有引号,否则执行失败。比如:spawn virsh -c 'esx://root@172.16.2.179?no_verify=1' list --all,会报错:no such file or directory。实际工作中免不了要将一些带有特殊字符的参数用引号包起来,这时可以绕一下,将命令写到文件中再执行:

    expect执行脚本:pass.sh

    #!/bin/expect
    set command [lindex $argv 0]
    set passwd [lindex $argv 1]
    spawn ${command}
    expect {
        "*password*" {
            send "${passwd}\r"
            exp_continue
        }
        "*error*" {
            exit 1
        }
        eof {
            exit
        }
    }
    

    存储命令的可执行脚本:commond.sh

    #!/bin/bash
    virsh -c 'esx://root@172.16.2.179?no_verify=1' list --all
    

    然后就可以执行:

    ./pass.sh ./commond.sh ABCDabcd.1234
    

    此时就达到了自动化输入的目的。

    详细的expect使用参考博客:https://www.cnblogs.com/lixigang/articles/4849527.html

    更多相关内容
  • 项目自动化部署与手动部署

    千次阅读 2022-03-01 16:53:11
    自动化部署 自动化部署参考自 coderwhy。 DevOps 传统的开发模式: 项目完成 => build => test => release => operate DevOps: 模块完成 => build => test => release => operate 持续集成: 持续交付: 持续部署:...

    自动化部署

    自动化部署参考自 coderwhy。

    DevOps

    传统的开发模式:

    • 项目完成 => build => test => release => operate

    DevOps:

    • 模块完成 => build => test => release => operate

    持续集成:

    持续交付:
    在这里插入图片描述
    持续部署:
    在这里插入图片描述

    阿里云服务器的配置

    1. 这里选择的是 CentOS 8.2。
    2. 重置系统后在远程连接中设置 root 密码。
    3. 安全 - 防火墙:配置暴露的端口号限制的 ip 地址来源。0.0.0.0 表示任何 ip 地址都可以访问。

    配置

    在这里插入图片描述

    CentOS 8 已经没有维护,需要进行换源才能正常下载:

    # 进入配置文件夹
    cd /etc/yum.repos.d/
    # 删除旧的配置文件
    rm *.repo
    # 下载可以用的.repo文件
    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
    # 生成缓存
    yum makecache
    

    搜索包:

    dnf search java-1.8
    

    下载包:

    dnf install java-1.8.0-openjdk.x86_64
    

    仓库中没有对应的 jenkins,需要使用 wget:

    wget –O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
    # 导入GPG密钥以确保您的软件合法
    rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
    # 或者
    rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
    

    编辑一下文件vi /etc/yum.repos.d/jenkins.repo

    [jenkins]
    name=Jenkins-stable
    baseurl=http://pkg.jenkins.io/redhat
    gpgcheck=1
    

    安装。

    启动Jenkins的服务:

    systemctl start jenkins
    systemctl status jenkins
    /usr/lib/systemd/systemd-sysv-install enable jenkins
    

    Jenkins 默认使用 8080 端口提供服务,所以需要加入防火墙。之后通过公网 IP 的8080 端口进入 Jenkins 的图形化界面。

    获取输入管理员密码: cat /var/lib/jenkins/secrets/initialAdminPassword

    安装推荐插件。

    安装 nginx,启动,设置自启动:

    ...
    systemctl enable jenkins
    

    配置 nginx:

    cd /root/
    mkdir mail_cms
    cd mail_cms/
    touch index.html
    

    vscode 中修改远程文件:

    • 使用插件
    • 连接服务器:ssh root@[ip地址]
    • 修改 etc/nginx/nginx.config:
      在这里插入图片描述
      在这里插入图片描述
    • 更改后重启 nginx。
    • 此时如果是手动部署,只需要使用工具将打包文件拖到文件夹里即可。

    自动化部署

    原理:

    • 将代码上传到一个 git 的仓库上;
    • Jenkins 每隔一段时间到该 git 仓库上下载代码并将其打包,再执行一段 shell 脚本将其部署到 nginx 上;

    安装 git。

    在 jenkins 中新建一个项目。

    github 生成一个 token:

    • 头像 - Setting - Personal access tokens;
    • 创建 token,权限勾选 repo 即可;
    • 将生成的 token 填入上述的密码即可;
      在这里插入图片描述
      在这里插入图片描述

    定时字符串从左往右分别是:分 时 日 月 周

    #每半小时构建一次OR每半小时检查一次远程代码分支,有更新则构建
    H/30 * * * *
    #每两小时构建一次OR每两小时检查一次远程代码分支,有更新则构建
    H H/2 * * *
    #每天凌晨两点定时构建
    H 2 * * *
    #每月15号执行构建
    H H 15 * *
    #工作日,上午9点整执行
    H 9 * * 1-5
    #每周1,3,5,从8:30开始,截止19:30,每4小时30分构建一次
    H/30 8-20/4 * * 1,3,5
    

    在这里插入图片描述

    在 Jenkins 中下载 Node 插件后点击重启。

    You can specify a new Node installation under “Manage Jenkins” -> “Global Tool Configuration” -> “Add NodeJS”.需要选择对应的版本。

    在这里插入图片描述

    配置构建:

    pwd
    node -v
    npm -v
    
    npm install 
    npm run build
    
    pwd
    
    echo '构建成功'
    
    ls
    
    # 删除/root/mail_cms文件夹里所有的内容
    rm -rf /root/mail_cms/* 
    
    cp -rf ./dist/* /root/mail_cms/
    

    在这里插入图片描述
    进入 /etc/sysconfig/jenkins 配置访问文件权限,然后重启 Jenkins:

    在这里插入图片描述

    设置项目文件夹的权限:

    chmod 777 .
    

    注意:

    • 项目中生产环境的 url 需要配置正确;

    点击立即构建。

    简单的手动部署

    1. 将项目进行打包;
    2. 使用 koa2 搭建运行环境(此处参考自):
    npm init -y
    npm i koa koa-static http-proxy-middleware -S
    
    const Koa = require("koa");
    const path = require("path");
    const proxy = require("http-proxy-middleware");
    const static = require("koa-static");
    const fs = require("fs");
    
    const app = new Koa();
    
    const url = "http://xxx"; // 服务器地址
    
    app.use(async (ctx, next) => {
      if (ctx.url.startsWith("/api")) {
        ctx.respond = false;
        return proxy({
          target: url, // 服务器地址
          changeOrigin: true,
          secure: false,
          pathRewrite: {
            "^/api": "/webapp/api",
          },
        })(ctx.req, ctx.res, next);
      }
      return next();
    });
    
    // 指定静态资源文件夹
    app.use(static(path.join(__dirname, "./build")));
    
    // 指定首页
    app.use(async (ctx) => {
      ctx.body = fs.readFile("./build/index.html");
    });
    
    // 监听
    app.listen(50001, () => {
      console.log("Listening 50001...");
    });
    

    在这里插入图片描述

    1. 尝试在本地运行是否能运行成功:
    node app.js
    
    1. 将其上传至服务器;
    2. 尝试在服务器端是否能运行成功;
    3. 在服务器使用 pm2 启动项目(若 centOS 8:pm2: command not found,可参考至):
    pm2 start app.js
    pm2 list
    
    展开全文
  • func.pybaidu_login.py中(如有验证码,需要手动输入)# 导入webdriverimport osimport timeimport refrom lxml import etreefrom selenium import webdriverfrom func import base642str, str2base64# 将mm隐匿# ...

    func.py

    baidu_login.py中(如有验证码,需要手动输入)

    # 导入webdriver

    import os

    import time

    import re

    from lxml import etree

    from selenium import webdriver

    from func import base642str, str2base64

    # 将mm隐匿化

    # import sys

    # print(str2base64("123456"))

    # str1_base64="MTIzNDU2"

    # print(base642str(str1_base64))

    # sys.exit()

    print('000-正在启用selenium...')

    # 调用环境变量指定的PhantomJS浏览器创建浏览器对象

    driver = webdriver.Chrome(r'D:\zzl\new_work\tmp\test01\baidulogin\chromedriver.exe')

    print('000-OK')

    #

    url = 'https://passport.baidu.com/v2/?login'

    print('111-selenium正在请求页面:%s' % url)

    driver.get(url) # get方法请求页面,获取响应

    print('111-请求OK')

    print("打印标题")

    print(driver.title)

    # 点击账号和密码登录

    input_box0 = driver.find_element_by_xpath("//p[@id='TANGRAM__PSP_3__footerULoginBtn']")

    input_box0.click()

    print('222-selenium正在填写表单...')

    time.sleep(1)

    account = "abcdef"

    pwd = "MTIzNDU2"

    verify_code = "1234"

    input_box1 = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_3__userName']")

    input_box1.send_keys(account)

    time.sleep(0.5)

    input_box2 = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_3__password']")

    input_box2.send_keys(base642str(pwd))

    time.sleep(0.5)

    # 判断是否需要验证码

    imgsrc = driver.find_element_by_id("TANGRAM__PSP_3__verifyCodeImg").get_attribute('src')

    if re.match(r'https://passport.baidu.com/cgi-bin/genimage.*', imgsrc):

    print("需要验证码")

    # 自动填写验证码

    # input_box3 = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_3__verifyCode']")

    # input_box3.send_keys(verify_code)

    # 手动填写验证码

    man_verify_code = input("请填写验证码:")

    input_box3 = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_3__verifyCode']")

    input_box3.send_keys(man_verify_code)

    print("验证码填写完成请等待")

    else:

    print("不需要验证码")

    print('222-填写表单OK')

    time.sleep(1)

    print('333-selenium提交表单...')

    one_click = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_3__submit']")

    one_click.click()

    time.sleep(1)

    # 判断是否需要手机号绑定确认

    try:

    # 绑定手机号确认

    one2_click = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_27__rebindGuideCancel']")

    one2_click.click()

    except Exception as e:

    # print(e)

    print("无需绑定手机号确认")

    pass

    time.sleep(2)

    print('333-登录成功...')

    登录百度升级版:应对安全验证

    # 导入webdriver

    import os

    import time

    import re

    from lxml import etree

    from selenium import webdriver

    from func import base642str, str2base64

    # 将mm隐匿化

    # import sys

    # # print(str2base64("123456"))

    # # str1_base64="MTIzNDU2"

    # # print(base642str(str1_base64))

    # print()

    # sys.exit()

    print('000-正在启用selenium...')

    # 调用环境变量指定的PhantomJS浏览器创建浏览器对象

    driver = webdriver.Chrome(r'D:\zzl\new_work\tmp\test01\baidulogin\chromedriver.exe')

    print('000-OK')

    #

    url = 'https://passport.baidu.com/v2/?login'

    print('111-selenium正在请求页面:%s' % url)

    driver.get(url) # get方法请求页面,获取响应

    print('111-请求OK')

    print("打印标题")

    print(driver.title)

    # 点击账号和密码登录

    input_box0 = driver.find_element_by_xpath("//p[@id='TANGRAM__PSP_3__footerULoginBtn']")

    input_box0.click()

    print('222-selenium正在填写表单...')

    time.sleep(1)

    account = "abcdef"

    pwd = "MTIzNDU2"

    verify_code = "1234"

    input_box1 = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_3__userName']")

    input_box1.send_keys(account)

    time.sleep(0.5)

    input_box2 = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_3__password']")

    input_box2.send_keys(base642str(pwd))

    time.sleep(0.5)

    # 判断是否需要验证码

    imgsrc = driver.find_element_by_id("TANGRAM__PSP_3__verifyCodeImg").get_attribute('src')

    if re.match(r'https://passport.baidu.com/cgi-bin/genimage.*', imgsrc):

    print("需要验证码")

    # 自动填写验证码

    # input_box3 = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_3__verifyCode']")

    # input_box3.send_keys(verify_code)

    # 手动填写验证码

    man_verify_code = input("请填写验证码:")

    input_box3 = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_3__verifyCode']")

    input_box3.send_keys(man_verify_code)

    print("验证码填写完成请等待")

    else:

    print("不需要验证码")

    print('222-填写表单OK')

    time.sleep(1)

    print('333-selenium提交表单...')

    one_click = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_3__submit']")

    one_click.click()

    time.sleep(2)

    # 处理弹窗(手机验证码):点击关闭按钮

    i = 0

    while True: # 处理手机验证码认证反复弹窗

    try:

    one3_click = driver.find_element_by_id("TANGRAM__%s__header_a" % (22 + i)) # 22+i在应对弹窗的关闭按钮id名称发生变化。

    except Exception as e:

    print("无需手机验证码")

    break

    else:

    print("第 %s 次弹出安全验证,要求获取手机验证码" % (i + 1))

    time.sleep(0.5)

    print("1s后自动选择无需手机验证码")

    time.sleep(1)

    one3_click.click()

    print("1s后自动点击登陆")

    time.sleep(1)

    one_click.click()

    time.sleep(2)

    # 判断是否成功登陆

    current_title = driver.title.strip()

    if current_title.startswith("登录"):

    print('333-登陆失败...')

    time.sleep(0.5)

    print('333-2秒后自动重试...')

    i = i + 1

    time.sleep(2)

    continue

    else:

    print("打印标题")

    print(driver.title)

    print('333-登录成功...')

    import sys

    sys.exit()

    # 处理弹窗(绑定手机号确认):点击不需要修改

    # 判断是否需要手机号绑定确认

    try:

    # 绑定手机号确认

    one2_click = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_27__rebindGuideCancel']")

    except Exception as e:

    print("无需绑定手机号确认")

    else:

    print("弹出了绑定手机号确认,1s后自动选择不需要")

    time.sleep(1)

    one2_click.click()

    # 打印标题

    print("打印标题")

    print(driver.title)

    time.sleep(2)

    # 判断是否成功登陆

    current_title = driver.title.strip()

    if current_title.startswith("登录"):

    print('333-登陆失败...')

    else:

    print('333-登录成功...')

    登录正常输出:

    000-正在启用selenium...

    000-OK

    111-selenium正在请求页面:https://passport.baidu.com/v2/?login

    111-请求OK

    打印标题

    登录百度帐号

    222-selenium正在填写表单...

    不需要验证码

    222-填写表单OK

    333-selenium提交表单...

    第 1 次弹出安全验证,要求获取手机验证码

    1s后自动选择无需手机验证码

    1s后自动点击登陆

    333-登陆失败...

    333-2秒后自动重试...

    第 2 次弹出安全验证,要求获取手机验证码

    1s后自动选择无需手机验证码

    1s后自动点击登陆

    打印标题

    帐号设置

    333-登录成功...

    登录失败输出:

    000-正在启用selenium...

    000-OK

    111-selenium正在请求页面:https://passport.baidu.com/v2/?login

    111-请求OK

    打印标题

    登录百度帐号

    222-selenium正在填写表单...

    不需要验证码

    222-填写表单OK

    333-selenium提交表单...

    无需手机验证码

    无需绑定手机号确认

    打印标题

    登录百度帐号

    333-登陆失败...

    参考:

    selenium 带验证码的自动登录

    Python selenium自动化识别验证码模拟登录操作(二)

    展开全文
  • - WebDriver框架篇 - 框架设计小结 基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - testng使用 基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - ant使用 - 关于如何手动下载JAR包 基于JAVA实现的WEB端UI自动化 ...
    万叶集
    🎉 隐约雷鸣,阴霾天空。 🎉
    🎉 但盼风雨来,能留你在此。 🎉

    前言
    ✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 🐶哈士奇🐶 ,一位致力于 TFS 赋能的博主 ✌
    🏆 CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主 🏆
    📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
    💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬
    🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦


    专栏系列(点击解锁)学习路线指引知识定位
    🔥Python全栈白皮书🔥 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。
    语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。
    自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。
    自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。
    数据库开发实战篇 更新中
    爬虫入门与实战 更新中
    数据分析篇 更新中
    前端入门+flask 全栈篇 更新中
    django+vue全栈篇 更新中
    拓展-人工智能入门 更新中
    网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者
    网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。
    vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。
    shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结]
    WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
    渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
    点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器
    测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得!
    测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。
    RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。
    Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。
    MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。

    基于JAVA实现的WEB端UI自动化 -自动化测试简单介绍

    基于JAVA实现的WEB端UI自动化 - WebDriver基础篇 - 实现简单的浏览器操作

    基于JAVA实现的WEB端UI自动化 - WebDriver基础篇 - 元素定位

    基于JAVA实现的WEB端UI自动化 - WebDriver基础篇 -常见的页面元素操作

    基于JAVA实现的WEB端UI自动化 - WebDriver基础篇 - iframe元素定位

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 元素定位场景分析

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 获取测试对象属性

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 获取测试对象状态

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 第三方控件类操作

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 执行JS操作

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - WebDriver的三种等待方式

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 模拟键盘操作

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 代码检查点[验证点/断言]与图像检查点

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 验证码处理

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - cookie操作

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 关联

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - exe文件执行

    基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - grid [跨浏览器远程测试-可分布式]

    基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - 框架设计小结

    基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - testng使用

    基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - ant使用 - 关于如何手动下载JAR包

    基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - ant使用 - ant安装、环境变量配置、ant实例及运行Ant Build 出现问题的解决方法

    基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - ant使用 - ant调用testng文件及ant 调用testng遇到的问题

    基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - ant使用 - ant调用email 自动发送邮件

    基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - ant使用 - ant发送邮件显示源码的解决方法

    基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - XSLT (报告、模板框架)

    基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - Jenkins[定时计划执行任务]

    基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - 内部框架及UI自动化测试框架思维导图

    完结!撒花!✿✿ヽ(°▽°)ノ✿

    1 - Web自动化测试简介

    • 软件测试领域技术不断创新
    • 手工测试重复性工作量较大
    • 技术革新,通过使用工具或者脚本代码让计算机帮助测试人员完成一些简单操作

    1.1 自动化测试的本质

    • 其本质是把手工测试转化成使用计算机、软件、程序来测试产品的过程。在设计
      测试用例并通过评审之后,由测试人员根据测试用例中描述的步骤来一步一步执 行测试代码,得到的实际结果与期望结果进行比较。

    • 重复姓的测试工作在时间紧迫的情况下会有范围遗漏,为了节省人力、时间、资 源、提高测试效率,保证测试范围,引入了自动化测试概念。

    1.2 自动化真的具有绝对的高效性?

    • 自动化并不是绝对的完全高效率。
    • 在产品需求变更频繁,项目周期较短,开发人员代码不够规范的情况下,给自动化脚本的编写也带来大量的修改。甚至因为开发人员编写的代码的问题从而提升 了自动化脚本编写的难度,需要花费大量的时间去解决一些脚本编写过程中遇到 的一些未知的问题,那么这种情况下,手工测试往往要比自动化测试要更有效率。

    1.3 手工测试与自动化测试的比较

    • 通常情况下,测试的工作量会占据整个项目的的40%-60%的开发时间,甚至有的
      时候开发工作还没有开始,测试人员就已经介入了项目。
      测试过程中,许多的过程是重复性、非智力性、非创造性、并要求做准确细致的工作,这个时候计算机就是最适合代替人工去完成这样任务的角色。
    • 自动化测试是相对手工测试而存在的,主要是通过软件测试工具、脚本等来实现的,自动化测试脚本具有良好的可操作性、可重复利用性和效率高等特点。

    1.4 手工测试的局限性与自动化测试的优势

    手工测试的局限性:

    • 手工测试无法覆盖所有的代码路径
    • 简单的功能性测试用例在每一轮的测试中都不能少,而且具有一定的机械性、重 复性,工作量较大,影响效率。
    • 举例:如果有大量(几千)的用例,短时间内,手工测试往往是做不到的。

    自动化测试的优势:

    • 缩短软件开发测试周期,可以让产品更快的投放市场。
    • 测试效率高,可以充分利用硬件测试资源
    • 节省人力资源,降低测试成本
    • 增强测试的稳定性和可靠性
    • 提高软件测试的的准确度和精确度,从而增加软件的信任度
    • 使测试工作相对比较容易,但能产生更高质量的测试结果

    附:自动化测试绝不是因为厌倦了重复的测试工作,想要取代掉手工测试。相反的 是因为测试工作的需要,更准确的说是为了回归测试和系统测试的需要。

    1.5 自动化测试介入的场景

    那么问题来了,自动化能否取代手工测试?

    首先,我们要考虑的是,什么样的项目适合自动化?

    • 决定项目能否采用自动化测试,通常从以下几个方面考虑:
      • 需求的变更有计划性,且变更的频率不高
      • 项目的周期较长,硬件软件人工资源配置丰富。
      • 自动化脚本的重复使用率高
      • 开发人员代码编写的规范性

    在确定了什么样的项目可以使用自动化之后,身为测试人员还要考虑在项目中, 那些部分适合自动化。

    • 普遍的观点是:很多人认为自动化更适合回归测试和API测试,手工测试更 适合做验收测试和GUI测试。

    • 其实正确的观点:区分手工测试和自动化测试的,实际上与API还是GUI,回归测试还是功能测试都没有关系。应该从代码是业务逻辑相关还是基础性代码这两个方面出发考虑。

      • 业务逻辑代码:对应终端用户使用的哪些功能,是实际完成工作的。

      • 基础性代码:确保业务逻辑代码运行在合适的环境中。起支撑作用而彼此之间又相对独立,并不存在业务关系。

      • 两种代码都要测试,手工测试更适合测试业务逻辑。

    • 手工测试适合成为领域专家,他们可以把想当复杂的业务逻辑存在最强力的测试工具—大脑里。而且手工测试速度比较慢,测试人员就有时间可以观察分析细微的逻辑问题。速度虽然慢,但是比较容易。

    • 自动化测试胜在测试底层的细节。自动化可以测试错误返回值、返回码、异常和内存使用等等。速度快但是也困难些。相对业务逻辑进行自动化测试比较困难, 风险也略大。

    1.6 自动化测试的流程

    需求分析>>>自动化测试规划>>>自动化测试脚本编写>>>测试执行>>>测试总结

    自动化测试规划:功能>>>自动化>>>安全(渗透)>>>性能

    关于"安全(渗透)"这一块的"自动化"16年在写这一份文档的时候仅仅停留在字面的概念上,随着近两年学习从事安全领域以及所做的一些漏洞挖掘之后对这一块有了很深刻的印象。比如圈内一些很厉害的白帽子师傅通过自己编写的自动化脚本以及POC、EXP然后进行全网的扫描[此时已经不仅仅是局限于某个产品端了],可以挖掘大量的高危漏洞甚至可以直接getshell。

    需要说明的是 “安全(渗透)测试” 虽然也是"测试",但与传统意义上的软件测试还是有很大区别的。就我个人的理解 “安全(渗透)测试” 是一门领域性的技能和应用场景,虽然在某些方面有些许的重叠,比如安全领域的"逻辑漏洞" 与测试人员测出的功能上的BUG 。但是其还是有本质上的区别的。

    1.7 适合自动化测试的工具

    • 支持脚本化语言(Scripting Language)
    • 对程序界面中对象的识别能力
    • 支持函数的可重用性
    • 支持外部函数库
    • 抽象层—将程序界面中的对象实体映射成逻辑对象
    • 支持数据驱动测试(Data-Driven Test)
    • 错误处理
    • 调试器(Debugger)
    • 源代码管理
    • 支持脚本的命令行(Command Line)方式

    2 - 常用的自动化测试工具

    2.1 QTP

    • QTP是由HP提供的侧重于功能的回归自动化测试工具;提供了好很多插件,如.NET的,Java的,SAP的,Terminal Emulator的等等,分别用于格子类型 的产品测试。默认提供Web,ActiveX和VB。【讲道理,目前我所接触的项目还没有使用该工具的前几年从朋友那里了解到 交行与东航貌似还在使用该工具,不过该工具的最新版本已经叫 “UTF” 了,下文有介绍】

    • QTP 的脚本语言是VBScript,这对于测试人员来说,感觉要“舒服”的多。VBscript毕竟是一种松散的、被阉割的、普及面很广的语言。【其实就是弱类型语言】

    • QTP支持录制和回放的功能。
      录制产生的脚本,可以用来作为自己编写的template。
      录制时还支持lower lever功能,该功能用于QTP不易识别的对象使用,不 过它是使用坐标来标识的,对于坐标位置频繁变动的对象,此种方法不可取。
      QTP编辑器:Keyword模式与Expert模式。
      Keyword模式:类似RobotFrameWork的表格视图。
      Expert模式:代码视图。

    2.2 Selenium(Webdriver)

    • 价格:开源、免费
      相较于QTP而言(商业版、收费的、一个lessons大概价格100万美金左右)
      绝大多数的公司在商业版软件上更愿意选择使用Selenium完成同样工作的高级自动化测试人才,毕竟大多数的公司的最终目的还是以营利为主。【插句题外话,商业版的软件往往在报告输出上做的非常完善。】

    • 应用领域:基于浏览器的Web端自动化测试,Selenium仅支持Web页面的测试工作;
      QTP不仅支持Web界面的测试工作,还支持Client方面的测试,这一点上是 Selenium的不足之处。

    • 功能方面:
      录制功能方面,QTP要强于Selenium。
      QTP录制回放成功率很高,但是Selenium的录制回放功能成功率就非常的低, 所以我们在测试过程中也不会使用录制功能。
      脚本的编辑方面,不好判断。
      熟悉Java、Python等的人,会比较喜欢Selenium,
      熟悉VBScript就比较喜欢QTP。

    • 框架处理能力:
      在数据驱动方面,QTP支持很灵活,可以通过简单的设置就可以完成数据驱动的自动化脚本。
      Selenium需要编程来实现才可以。但是这点并不能说明Selenium在框架的处 理能力上就比QTP差。Selenium提供了更加开阔的框架处理能力给客户看, 用户可以根据自己的实际情况开发出更适合自己的自动化测试脚本。
      举例:在进行Web端页面测试的过程中,我们不能保证页面就是恒定不变的, 所以这个时候,在自动化测试平台中就可以有一个页面层,页面变化了,只 需要通过修改页面层的代码(元素定位)来适应,而不需要去修改在页面之 后的测试用例代码。这样就可以简化我们的代码的工作量。

    • 用户仿真:
      Selenium在浏览器后台执行,它通过修改HTML的DOM(文档对象模型)来 执行操作,实际上是通过JavaScript来控制的。执行时窗口可以最小化,可以 在同一个机器执行多个测试Case。
      QTP是完全模拟终端用户,独占屏幕,同一时间只能开启一个独占的实例。
      在并发性上来讲,Selenium更好一些。

    • UI组件支持:
      Selenium支持主要的组件,但是某些特殊事件、方法和对象属性支持不够
      QTP提供了良好的支持,通过收费的插件,提供了对各种组件的支持。

    • 对象识别:
      QTP所见即所得,用SPY插件、对象库的方式获取
      Selenium提供的是各种对象识别接口来识别

    • 支持的平台:
      Selenium支持多种语言,可以跨平台。
      QTP只使用于windows。

    • 脚本创建:
      QTP视乎更容易一些
      Selenium略难,需要一定的代码知识能力

    2.3 UFT(Unified Functionnal Testing)

    UFT是QTP的新名字,叫统一功能测试框架,较QTP而言增加了一些新的功能。

    • Insight智能图像识别
      图像识别一直是自动化测试的阻碍之一。包含游戏自动化、flash动态的一些 自动化。
      附:这个图像识别比较类似sikuli的方式,以图像方式进行识别,所以对验证 码等的识别没有太大的作用。(白兴奋了 o(╯□╰)o)【不知道几年过去了,UFT这方面有没有长进】

    • 多脚本调试(个人观点,鸡肋。类似于开多个窗口进行调试)

    • PDF文本验证点
      现在UFT可以识别PDF文件并对他们直接进行比较,甚至可以插入文本验证点。

    • 支持开源CI(鸡肋,现在大多数自动化测试工具都支持CI)

    • 支持移动设备(仍然鸡肋,移动端自动化的工具也很多)

    2.4 RFT(IBM Rational Functionnal Tester)

    IBM的一款适合功能测试、回归测试的自动化测试工具。
    它的基础是针对于Java、.NET的对象技术和基于Web应用程序的录制与回放,
    我们可以利用它以Eclipse为核心的特点用Java脚本自行编写更具有灵活性的自动化测试脚本用于日场和回归测试。这款自动化测试框架是在Selenium出现之前大家认为最容易进行扩展的一个框架。
    TIP:尽管RFT提供了录制和回放的功能来开发自动化脚本,但这并不是一个很好的方法,很多测试团队也并没有采用,因为录制与回放功能对于程序运行的环境运行依赖性太大,包括了程序的位置、窗口的分辨率,每个变化都将会导致脚本无法正确的运行,因此更多使用该工具的测试团队采用了自己手动写脚本的方式来提高脚本的易读性以及可维护性。

    • 框架结构:
      RFT的脚本可以分别被归类为AppObjects、Tasks和Testcases
      AppObjects:定义页面上的元素。在测试过程中,所有用到的页面元素都定
      义并储存在这一层中,这一层还包含了所有页面上显示的字符串。
      Tasks:定义可以单元化,可重用的任务,调用在AppObjects中定义的元素。
      Testcases:一个case写成一个脚本,每个测试场景,可以写成一个或多个脚 本,每个脚本只调用Tasks中定义的可重用的任务。
      附:这个架构的分层架构思路基本与WebDriver的分层架构思路一致。

    • 传播与使用范围

      • 帮助文档和教程很少,很不系统。而提供额API接口只有说明文档,未 提供如何使用该文档;提供的例子很少。
      • 环境要求较高,至少得1G内存才能比较顺畅使用,512内存比较卡, 速度慢
      • 参数化只支持使用XML格式文件来存储测试数据
      • 回放速度超级慢
        附:所以才有了Selenium开发以后的强势和很多之前RFT使用者可以快速上手。

    2.5 Monkeyrunner(手机自动化工具)

    目前Android SDK里自带的现成的测试工具

    Monkey和MonkeyRunner

    Monkey:主要用于压力和性能测试上,运行该命令可以随机地向目标程序发送各种模拟键盘事件流,并且可以自定义发送的次数,以此观察被测应用程序的稳定性和可靠性,应用比较简单,记住那几个命令就可以了。

    MonkeRunner:相比较之下更强大一些,主要用于功能测试,回归测试。并且可以自定义测试扩展,灵活性较强,测试人员可以完全控制。

    2.6 Robotium(手机自动化工具)

    Robotium是一款测试Abdroid Application的测试框架,它使得编写黑盒测试代码更 加容易和稳定。通过使用Robotium,测试用例开发人员能够跨越多个Activity,开 发出功能、系统以及验收测试用例。
    Robotium是基于Android测试框架InstrumentTestCase2进行的2次封装,把一些基 本操作又简化了一遍。

    也是最近比较流行和正在上升势头的手机自动化测试工具。

    优势如下:

    • 针对黑盒测试
    • 在测试过程中,不必需要测试程序的源代码,只要apk文件(前提是需要知 道测试程序的package和activity)
    • 可以直接运行在手机上,并通过adb端获得运行结果。

    附:在使用该工具的时候有一必须点:当编辑完测试脚本后,会生成一个apk文件, 将该apk安装到手机端,并通过adb输入一系列命令后直接运行测试脚本。但 该apk的签名必须要与测试程序的apk签名保持一致。

    2.7 Sikuli(新型思路的自动化测试工具)

    创新的图形化编程技术

    Sikuli是由MIT的研究团队发布的新型图形化编程技术。它以图像检索技术为基础, 提供了一套基于Jython(Python语言在java中的完整实现)的脚本语言以及集成开发 环境。使用者可利用屏幕截图直接引用GUI元素进行编程,完成交互操作。Sikuli 一词取自墨西哥Huichol Indian 土著语,意为“上帝之眼”,正如其开发者所说–Sikuli 让电脑能像人一样“看”这个“真实世界”。

    • Sikuli脚本
      Sikuli的脚本编写遵循Python语法规范,其本身提供了多种自定义类及其自 定义方法,其详细介绍可参见其官方网站文档。由于Sikuli基于Jython,其核 心代码由Java编写,可在用户自定义的Java工程中将其作为Java标准类库 进行引用,其官方网站亦提供了JavaDoc供参考。

    • 下图为自动打开FireFox浏览器,并登陆Gmail的简单实例,快速一览Sikuli 脚本的独特之处。


    在这里插入图片描述


    2.8为什么选择Selenium(Webdriver)

    · 开源免费
    · 使用灵活简单
    · 后期用例易于维护
    · 支持多种语言
    · 容易与单元测试框架结合
    · 可支持多浏览器同时,支持远程启动其他服务器
    · 高度复用性
    · 代码自主掌控,对于搭建框架、平台等有不可替代的优势
    

    3 - 测试自动化和自动化测试

    3.1 什么是测试自动化?

    这是一种让测试过程脱离人工的一次变革。对于控制成本,控制质量,回溯 质量和减少周期都有积极影响的一种研发过程。

    3.2 什么是自动化测试?

    • 通过将测试执行部分或者全部交由机器执行的一种测试,叫做自动化测 试。这种测试不需要人的实时参与。同时这种测试在小规模应用时会比手工测试昂贵许多。

    • 所以自动化测试可以看做测试自动化的一部分。

    3.3 不同的工程师,工作不同

    • 一个自动化工程师,会比较专注于测试工具的研发。最主要的是这个工程师 会从成本的角度去考虑问题。这一点比较像PM。他所做的一切是为了减少 自己或者团队的工作量,尽可能的将重复的,有规律可循的工作代码化,自 动化。

    • 一个自动化测试工程师,会比较专注于测试代码的开发,以及测试结果的分 析。对于被测设备本身非常感兴趣。他们比较倾向于一种完美主义者,追求 的是高质量而经常忽略成本。这一点更像是开发人员

    • 现在绝大多数公司都会执着于自动化测试,而忽略测试自动化。这一点会让 整个AT(automation test)成本变得非常高。

    3.4 自动化测试的几个准则:

    • 并不是将测试用例代码化了,就可以称之为自动化测试了。这是现在很多公司宣称自己做AT的一个噱头。
    • AT的代码是有很多的要求。
    • 首先就是你的覆盖面要广。个位数case的自动化完全没有意义。
    • 第二就是你的case必须要能够复用:软件每天都在变,如果你的case要天天跟着软件变,那你的case是完全不合格的
    • 第三就是测试规模要够大:要么时间长(case多),要么测试产品多。这样 才能体现出来自动化测试的优势。

    3.5 测试自动化的几个准则:

    • 一就是要减少除工具研发部门外,其他所有测试部门的人力成本。这就是测 试自动化追求的终极目标之一。

    • 二就是提高测试质量,不仅仅包括测试执行的质量,还包括测试的统计质量, 数据回溯质量等等等等。这些质量的提高可以帮助测试团队修正他们的测试 方法,而不是每天将精力扑在无止境的数据收集和分析中。

    • 三则是要抢出时间。某一项工作自动化后的时间,要么比人手做时间短,要 么可以在非工作的16个小时中进行。通过让电脑OT的方法来解放工程师和项目经理。

    4 - 自动化测试三个阶段

    4.1 基本脚本设计阶段

    自动化测试:用例代码化
    将要进行测试的功能代码化,能够将线性流程通过自动化脚本完成测试
    举例:注册>>>登录>>>购物>>>支付>>>确认收货>>>退出

    4.2 框架脚本设计阶段

    测试自动化:繁杂的工作简要化,使用框架设计的手段。(数据驱动、关键字驱动、分层架构的思想)[测试自动化第一步]

    4.3 平台设计阶段

    如何开发一个自动化测试平台?讲道理,你都能搞定自动化测试平台了还干啥测试啊,产品经理、研发、架构师它不香么?等有时间了看看能不能把 "87test团队、雷子师傅"他们的自动化平台白嫖一个,到时候放出一个思维导图

    5 - 自动化环境搭建准备与相关工具

    这里以前写过一篇关于自动化环境搭建的文档,找到了再放出来把。

    暂时没找到,先放一个大概通用的吧。

    关于浏览器

    浏览器(开发者工具使用【F12】)
    Chrome(版本不要太高),同时注意驱动对应的浏览前版本
    Firefox (版本不要太高),同时注意驱动对应的浏览前版本
    IE9、IE10
    详见:浏览器版本与DriverServer对应表与资源 http://www.cnblogs.com/alisapan/p/6428695.html

    Selenium IDE(火狐浏览器上的插件)

    • 在进行元素定位操作时,可通过Selenium IDE进行捕捉元素的定位

    Java环境

    安装JDK,并配置环境变量。推荐1.8

    同时还需要注意JDK在Selenium 兼容上存在一定的问题。

    Eclipse/IDEA

    WebDriver Jar包

    单元测试框架 Testng

    tetsng安装方法:https://www.cnblogs.com/xusweeter/p/6559196.html

    展开全文
  • EndNote导入Word手动输入参考文献的方法。前面说过EndNote导入Word参考文献的方法,但是更多时候Word中的参考文献是手动输入的,如果想把这些参考文献的信息导入到EndNote该怎么办?这问题有人在微信上问,在此我就...
  • UI自动化测试与接口自动化测试区别

    千次阅读 2022-01-29 18:09:20
    1、UI自动化测试基本流程 (1)进行元素定位 (2)模拟手动操作 (3)输入测试数据 (4)获取输出结果 2、接口自动化测试基本流程 (1)模拟发送请求 (1)传入接口数据 (1)获取响应结果 总结:UI自动化...
  • 自动化测试系列(三)|UI测试

    千次阅读 2021-09-26 10:50:43
    UI 测试是一种测试类型,也称为用户界面测试,通过该测试,...在上次的自动化测试系列(二)中为大家大体介绍了API测试的概念及在猪齿鱼中的实践展开,本文主要围绕UI测试进行概念介绍及Choerodon中的实践展开。 下面.
  • expect是一款自动化的脚本解释型的工具,远程登录linux服务器的时候,ssh命令需要手工输入密码,当登录多台机器的时候就会非常繁琐。expect就可以根据设定的规则,自动帮我们输入密码,大大节省了时间。 在实际工作...
  • Jenkins实现自动化部署

    千次阅读 2022-02-17 21:08:01
    Linux系统中:基于JDK1.8 + Gitee + Maven3.8.3以jar包方式自动部署SpringBoot项目
  • 自动化测试常见问题总结

    万次阅读 2021-12-13 09:38:18
    自动化测试常见问题总结!
  • python UI自动化(一)

    万次阅读 2022-02-11 14:10:02
    一直以来都不是很想做UI自动化,原因:系统的稳定性差,UI界面经常变化等等。但是遇到接口又不稳定,还经常从接口写入的数据有误的而界面UI相对不是很复杂的情况下,UI自动化也是可以考虑的。比如最近在遇到一系统,...
  • UI自动化平台(一)

    万次阅读 2021-12-20 00:03:25
    2、Project interceptor:是选择使用的python版本,除了电脑中已经暗转过的python,也可以选择新的版本(新版本pycharm会自动下载); 3、Template language:是模板语言,我们选择django,其他的不用管; 4、...
  • 随着软件发展到不同的阶段对自动化会有不同的测试需求,因此也产生了多种测试类型,然而万变不离其宗,一切皆可自动化
  • 具体来说,它提供了自动化测试用例编写、自动化测试用例执行、自动化测试报告生成等基础功能。我们只需要基于这个框架,完成和业务高度相关的测试用例设计和实现即可。另外,框架会为我们处理好复杂度与扩展性的问题...
  • 常用PythonGUI自动化测试工具

    千次阅读 2022-01-24 21:47:24
    pywinauto是一组用于自动化Microsoft Windows GUI的python模块。 最简单的是,它允许您将鼠标和键盘操作发送到窗口对话框和控件。 下载: https://pypi.org/project/pywinauto/ 安装:pip install pywinauto 手动...
  • 说明:该篇博客是博主一字一码编写的,实属...自动化工具能自动打开程序、自动执行测试用例、自动查找控件、自动产生数据、自动输入数据、自动操作控件、自动收集结果、自动比较实际结果与预期结果是否一致。 2.软...
  • shell脚本中自动化交互输入

    万次阅读 2018-11-15 18:18:01
    有的shell脚本需要交互输入,如果需要批量或者自动化,可以根据实际情况按照如下方法处理 1.重定向 这个方法很简单,把需要输入的内容按每行写入到文档中,然后运行脚本 ./vpncmd &lt; content 2.使用管道 ...
  • 5种比较常见的自动化测试框架

    千次阅读 2020-10-26 14:34:43
    自动化测试框架
  • Mac上搭建IOS自动化测试环境

    千次阅读 2022-03-15 16:12:18
    安装后在终端检查是否成功安装,若未成功安装需手动配置环境变量(手动配置环境变量可参考Maven配置环境变量,此次未手动配置环境变量) 2、安装Xcode 直接从AppStore中安装 3、安装Homebrew (brew可用来安装一些...
  • Selenium+Python+Pycharm环境搭建 ...勾选之后会自动将python添加到系统环境变量Path中。也可以选择手动添加: 进入编辑系统环境变量-->选择高级系统设置-->环境变量-->环境变量-->系统变量:找.
  • Web自动化测试实战(一)

    万次阅读 多人点赞 2019-08-23 15:41:39
    一丶认识web自动化测试 1. 什么是自动化测试? 2.为什么进行自动化测试? 3.自动化测试的分类 二丶元素定位 1.为什么要学习定位元素? 2.元素定位的工具或手段有哪些? 3.环境及工具 4.css选择器 一丶认识web...
  • 在Windows上实现iOS APP自动化测试:tidevice + WDA + facebook-wda / appium中介绍了使用阿里开源的tidevice 和 facebook-wda实现在Windows上进行iOS APP自动化测试。本文介绍如何使用tidevice + WDA + airtest进行...
  • 如何利用Python实现工作中的自动化

    千次阅读 多人点赞 2019-12-04 10:26:23
    工作要学会偷懒,尤其对于一些大量重复的工作,第一感觉就要想到如何偷懒。 怎么偷懒呢? 做一点简单的自动化工作就可以了。
  • 自动化测试全流程总结

    千次阅读 2021-10-08 19:10:11
    自动化测试 一般是指软件测试的自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。 定义 人为驱动测试为转为机器执行过程 应用 软件测试的自动化 工具 ...
  • 在进行文档输入过程中,我们可能定位到元素,但是在进行文档输入时,却发现输入内容提示找不到元素 可通过js方式定位id进行解决切换到控制台,输入document.getElementById(‘docContentDiv’).innerHTML=‘zhanghx...
  • UI自动化测试(APP测试)

    千次阅读 2022-04-03 19:35:33
    一、UI自动化测试介绍 1、什么是自动化测试 概念:由程序代替人工进行系统校验的过程 1.1自动化测试能解决的问题? 回归测试 (冒烟测试) 针对之前老的功能进行测试 通过自动化的代码来实现。 针对上一个版本的问题...
  • “ 介绍有关自动测试工具-uirecorder环境搭建” 01—目录 1.介绍 2.注意事项 3.介绍 4.环境搭建 5.重点提及一下nodejs的安装。 6.创建一个工程:录制web页面 7.扩展:录制app   02—注意事项 1.文件夹...
  • 自动化测试——接口测试怎么做?

    千次阅读 2020-07-22 13:53:42
    拿接口自动化来说,这是目前公司使用性价比最高的自动化,原因就在于ui自动化成本太高,经常页面大改,可能整个框架就废了,所以很多公司都优先做接口自动化,比较稳定,目前需求最多的。所以找工作,优先学习掌握...
  • 五种常见的自动化测试框架

    千次阅读 2021-10-09 16:57:06
    一、什么是测试自动化框架 自动化测试框架就是用于测试自动化的框架。具体来说,它提供了自动化测试用例编写、自动化测试用例执行、自动化测试报告生成等基础功能。我们只需要基于这个框架,完成和业务高度相关的...
  • .Net Core部署自动化发布(Jenkins)

    千次阅读 2020-01-08 19:38:44
    什么是自动化部署就是实现一次提交代码后。服务器端可以直接自动拉取代码发布成服务。无需繁琐的手动操作。 想要实现自动化首先需要理解。如何将程序发布为windows服务:=>... 自动化部署 1.安装jdk.(jenkins所需的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 285,643
精华内容 114,257
关键字:

自动化手动输入

友情链接: ddr_ctrl.rar