前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实际工作中用到的shell命令 - sed

实际工作中用到的shell命令 - sed

作者头像
我是胖虎啊
发布2022-06-27 18:10:29
2860
发布2022-06-27 18:10:29
举报
文章被收录于专栏:测试开发卷货测试开发卷货

背景

目前跑的接口自动化是通过Testng + Jenkins来做的, 但是项目可能跑在不同的平台上, 不同的平台有不同的ip.

目前是使用了Jenkins的参数化构建功能, 每次跑的时候,手动输入一个ip,然后对该ip的服务进行自动化测试.

Testng框架的配置文件是application.properties, 我们将服务的ip记录在这个文件中.

需求

根据从Jenkins传入的参数, 动态修改application.properties中的ip变量,然后进行后续测试工作.

application.properties 示例

代码语言:javascript
复制
server_ip=http://192.168.100.100

port=9000

path=/home/data

需求分析

目前想到的方法有2个:

  • 用python脚本读取文件,正则替换制定文本,生成个新文件
  • 用shell脚本来操作

从最简化考虑,优先考虑shell的方法.

Linux有3剑客: grep ,sed, awk.其中grep主要做过滤, sed主要做文本的相关处理(如修改替换等),awk主要做数据处理,报告输出等。所以应该考虑使用sed命令来解决此问题.

实际操作

  1. 从网上搜了下相关的sed用法, 参考链接: https://blog.csdn.net/ganfanren00001/article/details/122765854

本次用到的sed命令截图

  1. 举一反三, 我是这样使用的
代码语言:javascript
复制
sed "/server_ip=/c server_ip=http://192.168.200.200" application.properties
  1. 但是这样有个问题,这样修改的只是暂时的,并没实际影响到真实的文件.其实sed有个-i参数,加上这个参数才会对真实的文件生效, 所以优化下就是
代码语言:javascript
复制
sed -i "/server_ip=/c server_ip=http://192.168.200.200" application.properties
  1. 这个命令在本地跑通了,接下来就是集成到Jenkins中使用这个命令
  • 首先在Jenkins中,选择参数化构建,我定义的参数名是server_ip
  • 在shell脚本中使用这个变量即可

注: Jenkins使用传入变量的格式为:${变量名}

代码语言:javascript
复制
#!/bin/bash

echo "传入的ip是:${server_ip}"

# 根据传入参数修改项目的ip
cd /home/data/jenkins/workspace/maven_testng/maven_testng/src/main/resources
sed -i "/server_ip=/c server_ip=http://${server_ip}" application.properties
echo "项目已更改为传入的ip: ${server_ip}"

踩坑点: sed 命令后面要使用双引号, 不能使用单引号, 否则会将变量识别成普通字符串!

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

本文分享自 测试开发卷货 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 需求
  • 需求分析
  • 实际操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档