어떻게 자동화 테스트에서 전자메일을 수발합니까
8132 단어 automation
자동화의 이유
기본 UI 및 API 테스트는 간단합니다.어떻게 시작하는지에 관한 강좌와 동영상이 많다.
흥미로운 것은 일부 기능을 얻으면 수동으로 검사하기는 쉬우나 자동화하기는 쉽지 않다는 것이다.
그 중 하나는 이메일: 메시지를 보내고 메시지를 받았는지 확인하는 것이다.예를 들어 비밀번호 업데이트, 계좌 확인, 구매 확인 등 테스트를 할 수 있다.
이러한 상황에서 가능한 해결 방안은 테스트 중인 응용 프로그램을 약간 조정하는 것이다.
답을 찾다
적합한 라이브러리를 검색하기 시작했을 때 GreenMail, Gmail API, Java Mail API 등의 옵션을 사용할 수 있습니다.
Green Mail는 전자 우편 기능을 테스트하는 데 사용되는 소스 라이브러리다.SMTP, SSL 및 POP3 프로토콜을 지원합니다.이것은 단원과 통합 테스트에 사용되는 아름다운 도구로 쉽게 설정하고 사용할 수 있다.
유일한 점은 순환 라이브러리 설계입니다. 로컬 호스트에만 배치하고 로컬에서만 메시지를 보내거나 포획할 수 있도록 만들어집니다.
Gmail API Gmail 애플리케이션으로 가능한 모든 일을 할 수 있습니다.만약 기능이 완비되고 메일을 광범위하게 사용하는 응용 프로그램이 목표라면 이것은 매우 좋은 API이다.
그러나 이를 사용하는 단점은 업무 견본을 얻기 위해 많은 추가 절차를 거쳐야 한다는 것이다.
왜 우리 사례에서 그것을 사용하지 않습니까?
Gmail 테스트 계정 구성
Gmail을 사용하여 테스트를 진행하기 위해서는 create a separate test account가 필요합니다.그것을 위해 좋은 추측하기 어려운 비밀번호를 설정하십시오.(암호 관리자를 사용하여 안전한 곳에 저장합니다.)
이 계정에 중요한 정보를 저장하지 마십시오. - 수시로 메일을 삭제하십시오.
다음 단계에서는 추가 보안 조치를 처리합니다.
구현 코드(Scala에서)
메시지를 보내고 받으려면 다음과 같이 하십시오.
val properties = System.getProperties
properties.put("mail.smtp.host", "smtp.gmail.com")
properties.put("mail.smtp.port", "465")
properties.put("mail.smtp.auth", "true")
properties.put("mail.smtp.ssl.enable", "true")
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
properties.put("mail.store.protocol", "imaps")
properties.put("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
properties.put("mail.imap.socketFactory.fallback", "false")
properties.put("mail.imaps.usesocketchannels", "true")
properties
로그인 이름과 비밀번호를 사용하여 세션 대상을 만드는 방법을 추가합니다
사용자 이름과 비밀번호는 src/test/resources/application에 저장되어 있음을 주의하십시오.conf 파일.
private def getSession(properties: Properties) = {
val session: Session = Session.getInstance(properties, new Authenticator() {
override protected def getPasswordAuthentication: PasswordAuthentication = {
new PasswordAuthentication(config.getString("username"), config.getString("password"))
}
})
session.setDebug(false)
session
}
메시지 보내기 준비 방법
이 예제에서는 텍스트와 텍스트를 사용하여 새 메시지를 만듭니다.txt 파일을 첨부 파일로 사용합니다. (이 두 파일은 모두 Resources 폴더에서 읽습니다.)이것이 바로 우리가 두 개의 다른 MimeType 대상을 만들어야 하는 이유입니다. 하나는 메시지에 사용되고, 다른 하나는 첨부 파일에 사용됩니다.그리고 이 두 부분은 모두 다른 대상인 여러 부분에 추가해야 한다.
우리는 자바를 사용합니다.우편물메시지를 전송하는 데 사용합니다.
private def sendEmail(session: Session, from: String, to: String, subject: String, messagePath: String, attachment: String): Unit = {
val message = new MimeMessage(session)
message.setFrom(new InternetAddress(from))
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to))
message.setSubject(subject)
val textPart = new MimeBodyPart
textPart.setText(Source.fromResource(messagePath).mkString)
val filePart = new MimeBodyPart
val res = getClass.getClassLoader.getResource(attachment)
val file = Paths.get(res.toURI).toFile
val fds = new FileDataSource(file.getAbsolutePath)
filePart.setDataHandler(new DataHandler(fds))
filePart.setFileName(fds.getName)
val multipart = new MimeMultipart
multipart.addBodyPart(textPart)
multipart.addBodyPart(filePart)
message.setContent(multipart)
Transport.send(message)
}
메시지 수신 준비 방법
새 Message CountListener가 폴더 객체에 추가되었습니다.대기 기능은promise와Idle Manager를 사용하여 이루어지며, 후자는 폴더 변경을 기다립니다.
private def receiveEmail(session: Session, folder: Folder, subject: String): Message = {
val manager = getIdleManager(session)
val event = waitForFirst(awaitForNewMessages(folder, manager))(_
.getMessages.toList.head.getSubject.contains(subject)).futureValue
val message = event.getMessages.toList.head
message
}
private def awaitForNewMessages(folderName: Folder, idleManager: IdleManager): Future[MessageCountEvent] = {
val promise = Promise[MessageCountEvent]
folderName.addMessageCountListener(new MessageCountAdapter {
override def messagesAdded(e: MessageCountEvent): Unit = {
promise.trySuccess(e)
}
})
idleManager.watch(folderName)
promise.future
}
e-메일 전송 및 수신 테스트 수행
테스트의 경우 ScalaTest 라이브러리와 "should" matchers
val messageSubject = "DEBUG MESSAGE"
val folderName = "Inbox"
val to: String = config.getString("recipient")
val from: String = config.getString("sender")
val props: Properties = getProperties
"Client" should "be able to send email message" in {
val session: Session = getSession(props)
sendEmail(session, from, to, messageSubject, "files/test.txt",
"files/test_attachment.txt")
}
"Client" should "be able to receive email message" in {
val session: Session = getSession(props)
val folder: Folder = openFolderInMailBox(session, folderName)
val message = receiveEmail(session, folder, messageSubject)
message.getSubject should be (messageSubject)
}
결론
만약 개발자이고 전자메일 기능을 단독으로 테스트하고 싶다면 그린메일은 좋은 선택입니다.
Java Mail API는 e-메일 처리에 적합하지 않습니다.그러나 표준 JavaEE 라이브러리에서 사용할 수 있으며, 상자를 열면 바로 사용할 수 있다.
전체 코드 예는 src/test/scala/email/MailApiTest에서 찾을 수 있습니다.scala 파일code samples.
e-메일/암호를 응용 프로그램에 붙여넣는 것을 잊지 마십시오.src/test/resources의 conf 파일입니다.
Reference
이 문제에 관하여(어떻게 자동화 테스트에서 전자메일을 수발합니까), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/al8xr/how-to-send-and-receive-emails-in-automation-tests-48ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)