精华内容
下载资源
问答
  • 为便于查看已经部署服务的日志查看,及异常排查,做了个简单的通过接口访问查看日志的小功能,直接上代码 /** * 读取日志文件 * @param rows * @param fileName * @return */ private String readLogFile...

    为便于查看已经部署服务的日志查看,及异常排查,做了个简单的通过接口访问查看日志的小功能,直接上代码

      /**
         *  读取日志文件
         * @param rows 要查看日志行数
         * @param fileName 日志文件路径
         * @return 日志字符串
         */
        private String readLogFile(int rows,String fileName){
            StringBuilder str = new StringBuilder();
            
            RandomAccessFile r = null;
            try {
                r = new RandomAccessFile(fileName, "r");
                //当前光标位置
                long start = r.getFilePointer();
                //记录光标位置
                long nextend = start + r.length() - 1;
                String result;
                //光标定位到文件尾部
                r.seek(nextend);
                int c;
                //已输出的行数
                int rowIndex=0;
                //将要输出的各行字符串记录
                String[] strs = new String[rows];
                //光标未到达文件起始位置
                while (nextend >= start) {
                    c = r.read();
                    //读取到回车、换行符
                    if (c == '\n' || c == '\r') {
                        //读取整行
                        result = r.readLine();
                        if (result != null) {
                            //转换处理中文及空格
                            result = new String(result.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
                            //简单样式处理
                            result = result.replace("ERROR", "<span style='color:red;font-weight: bold'>ERROR</span>");
                            result = result.replace("WARN", "<span style='color:blue;font-weight: bold'>WARN</span>");
                            result = result.replace("INFO", "<span style='color:green;font-weight: bold'>INFO</span>");
                        }
                        //记录要打印的行记录
                        strs[rows-rowIndex-1]=result;
                        //光标移动到回车、换行的前一个位置
                        nextend--;
                        rowIndex++;
                        //已输出的行数已达到要打印的行记录数
                        if (rowIndex >= rows) {
                            break;
                        }
                    }
                    nextend--;
                    if(nextend>=0) {
                        r.seek(nextend);
                    }
                }
                for (String s : strs) {
                    if (!StringUtil.isEmpty(s)) {
                        str.append(s);
                        str.append("<br />");
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (r != null) {
                    try {
                        r.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return str.toString();
        }
    /**
    * 根据当前运行环境 开发环境dev 测试环境test 生产环境prov 读取日志文件 
    */
        public String getLogs(Map<String,String> params) {
            String rowStr = params.get("rows");
            String log = params.get("log");
            String date = params.get("date");
            int rows = 2000;
            if (!StringUtil.isEmpty(rowStr)) {
                rows = Integer.parseInt(rowStr);
            }
            if (StringUtil.isEmpty(log)) {
                log = "info";
            }
            String logFileName = log;
            if (!StringUtil.isEmpty(date)) {
                logFileName = logFileName+date;
            }
            String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
            try {
                path = java.net.URLDecoder.decode(path, "UTF-8");
            } catch (UnsupportedEncodingException e) {
            }
            String fileName;
            String activeProfiles = SpringContextUtils.getActiveProfiles();
            //jar包路径中去掉多余部分
            if(path.contains("jar"))
            {
                path = path.substring(0,path.lastIndexOf("."));
                path = path.substring(0,path.lastIndexOf("/"));
            }
            path = path.replace("file:","");
            
            //开发环境
            if ("dev".equals(activeProfiles)) {
                path = path.replace("/target/classes/","") ;
                fileName = path+"\\logs\\" + logFileName + ".log";
            } else {
                fileName = path+"\\bat\\logs\\"+logFileName+".log";
            }
            return readLogFile(rows,fileName);
        }
    @GetMapping("getLogs")
        public void getLogs(HttpServletRequest request, HttpServletResponse response) {
    		String rowStr = request.getParameter("rows");
    		String log = request.getParameter("log");
    		String date = request.getParameter("date");
    		Map<String, String> params = new HashMap<>(4);
    		params.put("rows", rowStr);
    		params.put("log", log);
    		params.put("date", date);
    		String logs = getLogs(params);
    		PrintWriter writer = null;
    		try {
    			response.setContentType("text/html;charset=utf-8");
    			writer = response.getWriter();
    			writer.write(logs);
    			writer.flush();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}finally {
    			if (writer != null) {
    				writer.close();
    			}
    		}
        }
    /**
    * 获取当前运行环境
    */
    @Component
    public class SpringContextUtils implements ApplicationContextAware {
    	public static ApplicationContext applicationContext;
    	
    	@Override
    	public void setApplicationContext(ApplicationContext applicationContext)
    			throws BeansException {
    		SpringContextUtils.applicationContext = applicationContext;
    	}
    	
    	/**
    	 * 获取当前运行环境
    	 * @return 当前运行环境 dev开发环境 test测试环境 prov生产环境
    	 */
    	public static String getActiveProfiles(){
    		//获取环境
    		Environment environment = applicationContext.getEnvironment();
    		//这个获取的是配置的运行环境,如开发,测试,以及生产
    		String[] activeProfiles = environment.getActiveProfiles();
    		if (activeProfiles.length > 0) {
    			return activeProfiles[0];
    		}
    		return null;
    	}
    }

    最终通过  http://localhost:8008/**/getLogs?rows=5000&log=error  查看存放在error.log中的日志

    展开全文
  • 日志是一个成熟的系统里不可或缺的一部分,对于自动化测试框架来说,最大的作用大概在于可以取代print()方法,并且可以在日志文件中回溯。这里我们引入log日志类,来代替print()记录输出测试过程中的关键信息。 一、...

    日志是一个成熟的系统里不可或缺的一部分,对于自动化测试框架来说,最大的作用大概在于可以取代print()方法,并且可以在日志文件中回溯。这里我们引入log日志类,来代替print()记录输出测试过程中的关键信息。

    一、日志等级
    在日志中有五个等级debug、info、warning、error、critical
    在这里插入图片描述

    这里要注意的是:如果设置日志等级后,只有大于这个等级的信息才会显示,比如你设置输出记录信息的等级为:error,那么程序里所写的命令中,只有大于等于error的:error、critical输出命令才会被执行。

    二、新建日志类
    这里我直接贴出所写的代码,因为只有第一次写log类才会用到这些,平时只需要调用日志的命令就好了,所以个人认为这些代码详细意思不懂也没有关系,会调用就ok。

    这里有几个地方需要配置或者注意一下:

    2.1.项目路径和日志文件路径

    这里我配置了项目的路径base_url,并且准备新建一个log文件夹,用来放置log日志文件。

    为了不用再手动去创建log文件夹和log日志文件,这里我进行了判断文件夹和日志文件是否存在,如果不存在则创建日志文件夹和文件。

    2.2默认level值

    默认入参中有默认:clevel、Flevel,如果有等级需要可以进行更改

    clevel:cmd输出日志界面的日志等级

    Flevel:日志文件的日志等级

    在创建logger时,也对总的日志等级设置,这里我设置为了debug最低等级。

    3.log类代码

    # --coding:utf-8 --
    import os
    import logging

    # 定义了blog_ui项目的绝对路径
    base_url = “E:/111test/blog_ui/”

    class Logger:
    def init(self, path=base_url + “/log/autotest.log”, clevel=logging.DEBUG, Flevel=logging.INFO):
    # 判断log文件夹是否存在,不存在的话创建文件夹以及日志文件
    project_dir = os.listdir(base_url)
    dir_name = ‘log’ # log文件夹
    if dir_name not in project_dir:
    create_path = base_url + ‘/’ + dir_name
    os.makedirs(create_path)
    file = open(create_path + ‘/autotest.log’, ‘w’, encoding=‘gb18030’)
    file.close()
    # 创建logger
    self.logger = logging.getLogger(path)
    self.logger.setLevel(logging.DEBUG)
    # 防止创建多个logger对象
    if not self.logger.handlers:
    # 设置日志格式
    fmt = logging.Formatter(’[%(asctime)s] [%(levelname)s] %(message)s’, ‘%Y-%m-%d %H:%M:%S’)
    # 设置CMD日志
    sh = logging.StreamHandler()
    sh.setFormatter(fmt)
    sh.setLevel(clevel)
    # 设置文件日志
    fh = logging.FileHandler(path)
    fh.setFormatter(fmt)
    fh.setLevel(Flevel)
    self.logger.addHandler(sh)
    self.logger.addHandler(fh)

    def debug(self, message):
        self.logger.debug(message)
    
    def info(self, message):
        self.logger.info(message)
    
    def war(self, message):
        self.logger.warn(message)
    
    def error(self, message):
        self.logger.error(message)
    
    def cri(self, message):
        self.logger.critical(message)
    

    三、日志类的调用
    导入自定义的log类

    from common.log import Logger
    实例化一个log对象

    test_log = Logger()
    调用log类的方法:

    test_log.war(“警告信息”)
    test_log.info(“普通信息”)
    test_log.debug(“详细信息”)
    test_log.error(“错误信息”)
    test_log.cri(“严重错误”)
    demo.py

    from common.log import Logger

    test_log = Logger()
    test_log.war(“警告信息”)
    test_log.info(“普通信息”)
    test_log.debug(“详细信息”)
    test_log.error(“错误信息”)
    test_log.cri(“严重错误”)
    接下来加入日志后,就需要将之前的print方法逐个替换为log方法,并且在关键位置,例如:网址、元素定位地址、输入值、断言结果等信息,使用log日志来打印。

    展开全文
  • web端应用和APP查看系统日志

    千次阅读 2019-08-15 17:29:35
    查看动态日志,xshell连接服务器,命令: tail -f 日志文件目录/日志文件名 tail 反向查看文件,tail -f 动态查看文件内容 方法二: 第一步,在xshell命令行页面鼠标右键点击日志-启动,保存到本地目录;第二步,在...

    web端
    方法一:
    查看动态日志,xshell连接服务器,命令: tail -f 日志文件目录/日志文件名
    tail 反向查看文件,tail -f 动态查看文件内容
    方法二:
    第一步,在xshell命令行页面鼠标右键点击日志-启动,保存到本地目录;第二步,在应用上执行要进行的操作;第三步,在命令行页面,右键日志-停止;第四步,到本地查看刚刚保存好的日志文件;

    Android端
    adb logcat -v time 按时间查看日志
    adb logcat -t 100 打印最近100条日志

    ISO端
    通过在mac电脑上安装的iOS集成开发工具xcode查看 ,找开发

    展开全文
  • WEB安全测试分类及防范测试方法 1 Web 应用程序布署环境测试 2 1.1HTTP 请求引发漏洞的测试 2 1.2 操作系统目录安全性及Web 应用程序布署环境目录遍历问题测试 2 2 应用程序测试 3 2.1 SQL 注入漏洞测试 3 ...
  • web自动化测试第25步:加入log日志

    千次阅读 2019-04-04 18:41:58
    日志是一个成熟的系统里不可或缺的一部分,对于自动化测试框架来说,最大的作用大概在于可以取代print()方法,并且可以在日志文件中回溯。这里我们引入log日志类,来代替print()记录输出测试过程中的关键信息。 一...

    日志是一个成熟的系统里不可或缺的一部分,对于自动化测试框架来说,最大的作用大概在于可以取代print()方法,并且可以在日志文件中回溯。这里我们引入log日志类,来代替print()记录输出测试过程中的关键信息。

    一、日志等级

    在日志中有五个等级debug、info、warning、error、critical

    等级等级数值形容
    debug10详细信息
    info20预期信息
    warning30警告信息
    error40错误信息
    critical50严重错误

    这里要注意的是:如果设置日志等级后,只有大于这个等级的信息才会显示,比如你设置输出记录信息的等级为:error,那么程序里所写的命令中,只有大于等于error的:error、critical输出命令才会被执行。

    二、新建日志类

    这里我直接贴出所写的代码,因为只有第一次写log类才会用到这些,平时只需要调用日志的命令就好了,所以个人认为这些代码详细意思不懂也没有关系,会调用就ok。

    这里有几个地方需要配置或者注意一下:

    2.1.项目路径和日志文件路径

    这里我配置了项目的路径base_url,并且准备新建一个log文件夹,用来放置log日志文件。

    为了不用再手动去创建log文件夹和log日志文件,这里我进行了判断文件夹和日志文件是否存在,如果不存在则创建日志文件夹和文件。

    2.2默认level值

    默认入参中有默认:clevel、Flevel,如果有等级需要可以进行更改

    clevel:cmd输出日志界面的日志等级

    Flevel:日志文件的日志等级

    在创建logger时,也对总的日志等级设置,这里我设置为了debug最低等级。

    3.log类代码

    # -*-coding:utf-8 -*-
    import os
    import logging
    
    # 定义了blog_ui项目的绝对路径
    base_url = "E:/111test/blog_ui/"
    
    
    class Logger:
        def __init__(self, path=base_url + "/log/autotest.log", clevel=logging.DEBUG, Flevel=logging.INFO):
            # 判断log文件夹是否存在,不存在的话创建文件夹以及日志文件
            project_dir = os.listdir(base_url)
            dir_name = 'log'  # log文件夹
            if dir_name not in project_dir:
                create_path = base_url + '/' + dir_name
                os.makedirs(create_path)
                file = open(create_path + '/autotest.log', 'w', encoding='gb18030')
                file.close()
            # 创建logger
            self.logger = logging.getLogger(path)
            self.logger.setLevel(logging.DEBUG)
            # 防止创建多个logger对象
            if not self.logger.handlers:
                # 设置日志格式
                fmt = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')
                # 设置CMD日志
                sh = logging.StreamHandler()
                sh.setFormatter(fmt)
                sh.setLevel(clevel)
                # 设置文件日志
                fh = logging.FileHandler(path)
                fh.setFormatter(fmt)
                fh.setLevel(Flevel)
                self.logger.addHandler(sh)
                self.logger.addHandler(fh)
    
        def debug(self, message):
            self.logger.debug(message)
    
        def info(self, message):
            self.logger.info(message)
    
        def war(self, message):
            self.logger.warn(message)
    
        def error(self, message):
            self.logger.error(message)
    
        def cri(self, message):
            self.logger.critical(message)

    三、日志类的调用

    导入自定义的log类

    from common.log import Logger
    

    实例化一个log对象

    test_log = Logger()
    

    调用log类的方法:

    test_log.war("警告信息")
    test_log.info("普通信息")
    test_log.debug("详细信息")
    test_log.error("错误信息")
    test_log.cri("严重错误")

    demo.py

    from common.log import Logger
    
    test_log = Logger()
    test_log.war("警告信息")
    test_log.info("普通信息")
    test_log.debug("详细信息")
    test_log.error("错误信息")
    test_log.cri("严重错误")

    接下来加入日志后,就需要将之前的print方法逐个替换为log方法,并且在关键位置,例如:网址、元素定位地址、输入值、断言结果等信息,使用log日志来打印。

    展开全文
  • Web实时日志输出查看管理系统

    万次阅读 2019-04-03 18:17:30
    开发人员无权限访问生产服务器,怎样查看日志来分析问题? 安全管理合规的原因,开发未被授权访问...开源产品 logiohttp://logio.org/可实时采集日志通过 web 展示 , 应用多了,日志多了分类浏览不便,无法解决持久存储...
  • centos7通过Web查看日志服务器

    千次阅读 2018-08-06 21:24:49
     #所有类型的日志文件传给服务器  54 # Don't log private authentication messages!   55 *.info;mail.none;authpriv.none;cron.none /var/log/messages       6、 使用网页打开 输入 ...
  • test目录中提供了样本Web服务器日志文件和带有少量条目的测试日志文件,存储库中提供了单元测试。 运行解析器 $ node start.js 运行单元测试 $ node test/test.js 致观众 请查看您的建议并与我联系,或根据请求请求...
  • 专项测试之Web测试

    万次阅读 多人点赞 2019-12-23 14:19:55
    电商平台的分布式多层结构二、Web 测试测试方法1.Web 测试的总体策略2.Web 测试的范围3.Web 测试的方法3.1 功能测试3.1.1 链接3.1.2 表单3.1.3 Cookies3.1.4 设计语言测试3.1.5 文件上传3.2 性能测试3.2.1 链接...
  • 一、生成“伪视频”来丰富自动测试日志系统 二、日志系统的改进 三、改进方案描述 四、改进方案的实现 五、总结 参考资料 关于作者IBMRationalFunctionalTester是由IBM推出的针对Java,.Net和Web应用程序的...
  • Web测试中定位bug方法

    万次阅读 多人点赞 2018-01-18 17:49:25
    web测试过程中,经常会遇到页面中内容或数据显示错误,甚至不显示,第一反应就是BUG,进一步了解这个BUG的问题出在那里,是测试人员需要掌握的,可以简单的使用浏览器自带开发者工具、数据库工具配合去排查。...
  • 1.项目运行中发现一个好玩的东西,能够在网页上实时查看tomcat的运行日志信息,这样对于开发来讲,代码部署到测试环境 如果出现问题 调试起来就很方便,截图如下.开始不知道什么原理,只看到一个tailLog,网上搜了一下,...
  • 如何测试web网站?

    2021-03-23 14:54:09
    web网站本质上带有web服务器和客户端浏览器的C/S结构的应用...使得web测试成为一项正在不断研究的课题。其它要考虑的如下:  1、服务器上期望的负载是多少(例如,每单位时间内的点击量),在这些负载下应该具有什么样的
  • web380-扫目录文件包含 扫目录,存在page.php 访问发现报错,$id参数,可能存在文件包含 /page.php?id=flag web381-读源码找后台地址 page.php已经无法文件包含 看源码有一个可疑的路径 访问这个目录,最后注意...
  • 软件测试日志抓取

    千次阅读 2016-08-24 17:58:14
    日志抓取 adb logcat [options] > d: ...抓手机日志命令,看CRASH adb logcat -v time -d > d:/crash.txt -d 是运行完自动停止的作用 ② 手机APP ANR有问题,看日志 adb pull data/anr/traces.txt
  • web测试要点及基本方法

    万次阅读 多人点赞 2018-04-09 22:53:34
    基于Web的系统测试与传统的软件测试不同,它不但需要检查和验证是否按照设计的要求运行,而且还要测试系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。然而,...
  • 一般的网站的主要测试内容就分为以下几点: 目录 功能测试 性能测试 安全测试 稳定测试 兼容性测试 压力测试 功能测试: 功能测试常用到的有效方法: 等价划分法: ...
  • Web测试方法

    千次阅读 2020-05-11 14:16:27
    web端通用测试点请移步 1. Web 测试的总体策略 2. Web 测试的范围 √ 功能 √ 性能 √ 界面 √ 兼容性 √ 安全性 √ DB √ 文档 2.1 功能测试 ☆ 功能测试主要从链接、表单、Cookies、设计语言、数据库、文件上传等...
  • WEB端性能测试总结

    千次阅读 2019-02-14 11:33:36
    web端的性能测试应该注意的指标有:用户操作的响应时间、系统的吞吐量(TPS)、系统的硬件资源情况(CPU、硬盘、磁盘)、网络资源占用情况等。 HTTP请求类的性能指标关注点:  响应时间。这里的响应时间一定得是...
  • web测试的基本测试点

    千次阅读 多人点赞 2020-07-15 16:37:33
    一、什么是Web测试 如果要了解web测试,首先我们的清楚web项目是什么,一般指本b/s架构项目也就是通过浏览器进行访问的,在日常生活工作中,基于web系统的应用非常多。 打开电脑,抢火车票我们会登陆12306网站,...
  • 如何对web系统进行全面测试

    千次阅读 2020-08-04 18:45:36
    基于Web的系统测试在基于Web的系统开发中,如果缺乏严格的过程,我们在开发、发布、实施和维护Web的过程中,可能就会碰到一些严重的问题,失败的可能性很大。而且,随着基于Web的系统变得越来越复杂,一个项目的失败...
  • 1、在写web自动化测试框架,断言测试结果和预期结果,断言失败,测试用例执行失败,该怎么调用保存截图和打印日志信息的方法。 2、一开始我使用的时try结构,代码如图,其中result_text是我的测试结果,assert_text...
  • Web测试六大类型

    万次阅读 多人点赞 2018-10-11 17:14:30
    Web测试主要分为六个部分: 功能测试、性能测试、用户界面测试、兼容性测试、安全测试、接口测试 1、功能测试 1.1链接测试  链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的...
  • web测试方法总结

    千次阅读 2017-11-09 18:18:53
    自己在去年曾经在网上找了一些测试的方法,然后经过自己的整理从而整理出来这么一份web测试方法,应该算是比较全面的吧,现在分享一下,希望大家指正。 目录1. 登录测试 2. 注册测试 3. 导航条测试 4. 链接测试 5. ...
  • Web测试关注点

    千次阅读 2017-05-09 14:51:47
    Web测试关注点输入框1、字符型输入框: 字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,使用“粘贴、拷贝”功能尝试输入...
  • Web应用程序测试工具Top20

    千次阅读 2018-07-31 20:18:19
    它们是各种类型的工具,可以协助从需求捕获到测试管理等各种Web测试活动。以下是包含主要功能和下载链接的顶级Web测试工具的精选列表。 下面介绍了一些有助于Web测试的工具 测试管理工具 Web测试自动化工具 Web ...
  • 毕设-基于web日志挖掘的网络教学系统的设计与实现,整个项目采用MyEclipse+MySQL+JDK1.7工具,已上传资源包括源码及sql数据库,导入可直接运行;采用SSH框架实现课程管理,作业管理,学生在线学习,交互式通信,资源...
  • Web页面测试和接口测试的区别?

    千次阅读 2020-05-27 17:59:29
    测试接口测试用例:和功能测试一样,根据正向反向、参数组合、边界值分析、异常场景等方法测试用例,设计完测试用例后可以使用postman,jmeter进行测试 2. 接口套接口怎么实现? 1、获取上一个接口的返回值 2、将...
  • 软件测试-web端通用测试方法

    千次阅读 2018-12-14 14:53:28
    软件测试-web测试方法 一、输入框 1、非空校验(必填项校验): 必须按照需求说明书,编辑页面的输入框的必填校验,否则可能导致“业务相关的关键信息未输入/下个节点的获取不到数据报错”等异常情况; 2、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 220,271
精华内容 88,108
关键字:

web测试查看日志命令