zoukankan      html  css  js  c++  java
  • robotframework 测试工具添加PDF文件内容匹配插件

    robotframework  这个需要了解的请度娘。本文实现的是一个小功能。大体分为如下几个步骤

    1)给定一个pdf文件。

    2)读取pdf文件内容,并解析为文本内容。

    3)通过给定的内容,比对pdf文件内容。

    4)输出测试结果。

    5)发送结果到指定邮件。

    其中读取pdf文件内容,使用的是pdfminer

    其他的就是自己包装。

    涉及到部分隐私内容,部分代码如下:

    # -*- coding: UTF-8 -*-
    # coding=utf-8
    #from __future__ import unicode_literals
    import sys
    import os
    
    import subprocess
    import time
    import re
    from robot.libraries.BuiltIn import BuiltIn
    from mailcommon import mailcommon
    from pdfminer.pdfdocument import PDFDocument
    from pdfminer.pdfparser import PDFParser
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    from pdfminer.pdfdevice import PDFDevice, TagExtractor
    from pdfminer.pdfpage import PDFPage
    from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
    from pdfminer.cmapdb import CMapDB
    from pdfminer.layout import LAParams
    from pdfminer.image import ImageWriter
    import cStringIO
    #reload(sys)
    #sys.setdefaultencoding('utf-8')
    
    class pdfContentKeywords(object):
        ROBOT_LIBRARY_SCOPE = 'Global'
    
        root = os.path.abspath(os.path.join(__file__, '..'))
    
    
        def __init__(self):
            self.builtin = BuiltIn()
    
    
        
    
        def handlepdf(self, path, param_dict,email, fail=True):
            ''' Reads a specified directory pdf file and diff ...
    
            `path`: pdf file path
    
            `param_dict`: Require comparison data
    
            `fail`:  If there are differences it will throw an exception and test will fail
                     defaults to True, if False test's will continue '''
            param_dict=eval(param_dict)
            self.builtin.log("pdf: %s" %path)
            self.builtin.log("param: %s" %param_dict)
    
            fail = self.builtin.convert_to_boolean(fail)
            result=dict
            if fail:
                result=self._diffContent(path, param_dict)
            else:
                try:
                    result=self._diffContent(path, param_dict)
                except Exception, e:
                    self.builtin.log(e)
            msg=''
            for i in result:
                print u"result:%s=" % i,result[i]
                #print self.builtin.log(i) 
                msg+="=>".join([i,str("检验通过" if result[i]==1 else "检验没通过")])
            mail_obj=mailcommon()
            print u"mail MSG:%s" % msg
            maillist=[]
            maillist.append(email)
            mail_obj.send_mail(maillist,'测试结果分析',msg);
            self.builtin.log("End")
    
        def _readPdf(self,path):
            caching = False
            password = ''
            pagenos = set()
            maxpages = 0
            # output option
            outfile = None
            outtype = None
            imagewriter = None
            rotation = 0
            layoutmode = 'normal'
            codec = 'utf-8'
            pageno = 1
            scale = 1
            showpageno = True
            laparams = LAParams()
            content=''
            outfp=cStringIO.StringIO()
            try:
                rsrcmgr = PDFResourceManager(caching=caching)
                
                device = TextConverter(rsrcmgr, outfp, codec=codec, laparams=laparams,
                                           imagewriter=imagewriter)
                fp = file(path, 'rb')
                interpreter = PDFPageInterpreter(rsrcmgr, device)
                for page in PDFPage.get_pages(fp, pagenos,
                                                maxpages=maxpages, password=password,
                                                caching=caching, check_extractable=True):
                    page.rotate = (page.rotate+rotation) % 360
                    interpreter.process_page(page)
                fp.close()  
                device.close()
                content= outfp.getvalue()
                outfp.close()
            except Exception, e:
                print "Exception:%s",e
                self.builtin.log(e)
            content=content.replace('
    ','').replace('	','').strip('
    ')
            print u"pdf file content:%s"% content#.encode('utf-8').strip()
            return content
    
            
        def _diffContent(self,path,p_dict):
            result=dict()
            try:
                pdfContent=self._readPdf(path)
                fail=0
                for i in p_dict: 
                  print "dict[%s]=" % i,p_dict[i] 
                  if re.search(r''+i+p_dict[i] ,pdfContent,re.I | re.M|re.X):
                    fail=1   
                  result[i+p_dict[i]]=fail
            except Exception, e:
                print "Exception:%s",e
                self.builtin.log(e)
            return result
    
        
    
    if __name__ == "__main__":
        d = pdfContentKeywords()
        print d.handlepdf("C:\Print.pdf",{"船名/航次:":"CMACGMFIDELIO/B14WESVLC/VALENCIA"},'roger_he@5uzh.com',False)
        #d._readPdf("")
    

      

  • 相关阅读:
    PHP 关于字符串操作的练习
    PHP 字符串操作
    JavaScript DOM级事件
    JavaScript 会闪烁的文字
    JavaScript 当输入框获得焦点:如果输入框值为空,提示输入你的姓名,当输入框失去焦点,如果输入框值为空,提示用户名不能为空,边框颜色变为红色,如果输入框值不为0,那么不提示边框默认颜色
    Js 特效之鼠标点击出现小心心特效
    JavaScript BOM对象 DOM对象
    JavaScript 当用户在弹出的输入框中输入手机号码后,将手机号码的前7位转化为*号
    JavaScript 编写代码对用户输入内容的输入框进行排查,看有没有敏感字“草”字
    第一次c++作业小结
  • 原文地址:https://www.cnblogs.com/fer-team/p/4653669.html
Copyright © 2011-2022 走看看