由于公司提供的自动化平台,能力太有限,在对目前已有的自动化做迁移。自己做了一套基于文件模板的接口自动化框架。核心就是直接从浏览器F12录制,或者postman的collection导入。直接获取请求跟回复。自动化只需要基于这些模板,修改其中的部分值,还有写一些自定义的断言就可以。
背景先交到到这
开发过程还是很顺利的,吭哧吭哧就撸完了基本的代码,文件读写,http请求发送接收。这些都是之前写好了的手脚架。然后开始设计场景,写业务。这块也是驾轻就熟。写了无数遍了,这些还是很简单的。
第一个坑:邮件无法发送。。
这个邮件之前也是用的公司的质量技术组的邮箱做的。因为公司的网络控制的很严,邮件也是不能随便发送,那个exchange服务器用代码也是连接不上。所以只能用质量技术组的。但是最近一段时间,不知道是什么原因,抽风,一直发不出来邮件。找人支持,爱理不理。干脆,自己搭建一个得了。
百度了一番。还真是有。就是这个玩意:
http://james.apache.org/
老外的开源服务器。先从csdn下载了一个比较低的版本,结果发现各种配置无法读取,无法初始化。搞了半天,算了,直接拿最新的吧。毕竟java都到1.8了不是,咱也得与时俱进,直接拿最新的吧。
我以为是开箱即用的。很兴奋的就跑到bin目录直接run.bat搞起。
结果,发现各种端口不对啊,数据库有问题啊。。
算了,还是得回去啃文档。看了一圈老外的说明,大意就是要把这些xml的template去掉。程序就能读了。
smtp的服务端口,还有pop3的端口这些,自行配置一下,就可以用了。
服务器注册用户,就是用jame-cli.bat,进去里边添加一下邮箱的域名还有邮箱的用户就可以。
一切就绪,在springboot工程里边配置一下
#spring.mail.host=smtp.exmail.qq.com
spring.mail.host=127.0.0.1
spring.mail.port=2017
spring.mail.username=test@wizard.com
spring.mail.password=test
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=false
spring.mail.properties.mail.smtp.starttls.required=false
@Autowired
private JavaMailSender javaMailSender;
public void sendmail(String content,String subject) {
SimpleMailMessage mail = new SimpleMailMessage();
mail.setTo("[email protected]");// 收件人邮箱地址
mail.setFrom("[email protected]");// 收件人
mail.setSubject(content);// 主题
mail.setText(subject);// 正文
javaMailSender.send(mail);
}
百度一下,立马能发送邮件了。好不好用看疗效,runas走起:
有一步我跳过了没介绍。就是配置outlook邮箱这一步。我觉得这个没什么好讲的。
好了,在我的机器上,没人能阻止我发邮件了。
第二个坑:文件无法读取
这个坑就比较诡异了。我在本地的eclipse是可以直接读取的,代码如下:
ResourceUtils.getFile("classpath:json/xxx.json");
没毛病,都在本地运行了无数遍,绝对是好的无疑。
结果放到服务器上跑
classpath的路径是:D:\Users\xxxx.m2\repository\com\pingan\test\util\md5\1.0\json
问题在于,我的文件是已经都放到了src/resource/json下边的。为何它就是读不到呢?
第一步,看看是否已经打包到了jar里边,一看果然没有,立马加上打包的输出:
<build>
<resources>
<resource>
<directory>src/main/resourcedirectory>
resource>
resources>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
好了,重新打包,这下总打包上了,但是仍然报找不到这些文件。真是头疼啊。。。
百度了很久,没有明确答案。然后想了一下。
先试试是不是classpath改变的原因,在启动命令加上目录指定:
cd D:\Users\xxx\.m2\repository\com\pingan\test\util\md5\1.0\
然并卵
再手动指定新增一下classpath?
D:\jdk1.8.0_60\bin\java -classpath ".;D:\Users\xxxx\.m2\repository\com\pingan\test\util\md5\1.0\jar"
依然然并卵
是不是在jar包里边的,不能这么用呢?那个resourceutil是不是用来加载jar外部文件的。然后查了一番资料。果然
改一下代码:
InputStream stream = getClass().getClassLoader().getResourceAsStream(filePath);
然后转一下stream到string,完成文件读写的操作。
这下,总算可以了。
总的来说还是开发的经验太少了,很多坑没有踩过,解决问题走了许多弯路。