精华内容
下载资源
问答
  • ltp使用
    千次阅读
    2017-07-13 10:09:31

    1、安装
    pip install pyltp
    2、官网下载ltp model(注意版本,多试试几个)
    3、测试

    #-*- coding:utf-8 -*-
    from pyltp import Segmentor
    from pyltp import Postagger
    from pyltp import Parser
    import os
    LTP_DIR = 'E:/ltp/ltp_data/'
    print(os.path.join(LTP_DIR,'cws.model'))
    segmentor = Segmentor()  # 初始化实例
    segmentor.load(os.path.join(LTP_DIR,'cws.model'))  # 加载模型
    postagger =  Postagger()
    postagger.load(os.path.join(LTP_DIR,'pos.model'))
    parser =  Parser()
    parser.load(os.path.join(LTP_DIR,'parser.model'))
    
    def segment(sent):
        words = segmentor.segment(sent)
        words_list = list(words)
        for word in words_list:
            print (word)
        # segmentor.release()  # 释放模型
        return words_list
    
    def postag(word_list):
        postags = postagger.postag(word_list)
        for postag in postags:
            print (postag)
        # segmentor.release()  # 释放模型
        return postags
    
    def dep_parser(word_list,pos_list):
        arcs = parser.parse(word_list,pos_list)
        print("\t".join("%d:%s" % (arc.head, arc.relation) for arc in arcs))
    
    word_list = segment('释放模型')
    pos_list = postag(word_list)
    arcs = dep_parser(word_list,pos_list)
    更多相关内容
  • Linux套件LTP介绍,使用说明,以及使用实例。使用配置很全面可以直接使用
  • ltp 使用

    千次阅读 2018-12-29 09:35:21
    https://blog.csdn.net/yuanlaijike/article/details/78068331    1.1 LTP介绍  1.1.1 功能测试  1.1.2 回归测试  1.1.3 压力测试  1.2 LTP环境部署  ...

    https://blog.csdn.net/yuanlaijike/article/details/78068331

     

                1.1 LTP介绍
                    1.1.1 功能测试
                    1.1.2 回归测试
                    1.1.3 压力测试
                1.2 LTP环境部署
                    1.2.1 下载LTP
                    1.2.2 部署LTP
                1.3 目录结构
                    1.3.1 源码包
                    1.3.2 安装包
                1.4 测试框架
                    1.4.1 整体测试流程
                    1.4.2 测试用例执行流程
                    1.4.3 测试库
                1.5 测试执行
                    1.5.1 整体测试
                    1.5.2 单独测试
                        1.5.2.1 安装包测试
                        1.5.2.2 源码包测试
                1.6 牛刀小试
                    1.6.1 验证sqrt() 函数
                    1.6.2 验证echo命令

        源码地址:https://github.com/jitwxs/blog_sample

    1.1 LTP介绍

    LTP(Linux Test Project),是基于GPL协议的开源社区合作项目。2000年由SGI发起,IBM、OSDL和Bull等公司共同参与,2001年后由SUSE、富士通、Red Hat、Oracle共同开发和维护。

    通过功能测试、压力测试和回归测试来验证Linux系统的可靠性、稳定性和健壮性。整个项目约4000个测试用例,绝大部分用例采用C或Shell。

    LTP不仅测试内核,还测试整体系统环境,对功能执行失败时的返回和处理也进行测试。
    1.1.1 功能测试

    主要对man pages中1、8命令和2系统调用所描述的功能进行验证。
    1.1.2 回归测试

    修改了旧代码后,重新进行测试已确认修改没有引入新的错误或导致其他代码产生错误。
    1.1.3 压力测试

    测试系统功能特性再大负荷压力下的稳定性和可靠性。
    1.2 LTP环境部署
    1.2.1 下载LTP

    LTP项目目前位于GitHub,项目地址:https://github.com/linux-test-project/ltp

    获取最新版可以执行以下命令:git clone https://github.com/linux-test-project/ltp.git
    1.2.2 部署LTP

    首先执行下面命令安装相关软件包(已安装可跳过):

    #CentOS
    sudo yum install autoconf  automake  autotools-dev m4
    
    #Ubuntu
    sudo apt-get install autoconf  automake  autotools-dev m4

    在上节中我将ltp项目下载到了wxs用户的家目录(/home/wxs)下,如图所示:

    [wxs@bogon ~]$ cd ltp/
    [wxs@bogon ltp]$ ls
    aclocal.m4      configure.ac  INSTALL           pan                   testcases
    autom4te.cache  confLkNw6U    install-sh        README.kernel_config  testscripts
    confc20wzw      COPYING       lib               README.md             TODO
    config.guess    doc           ltpmenu           runltp                tools
    config.log      execltp       m4                runltplite.sh         utils
    config.status   execltp.in    Makefile          runtest               ver_linux
    config.sub      IDcheck.sh    Makefile.release  scenario_groups       Version
    configure       include       missing           scripts               VERSION

     

    进入ltp目录:cd ltp

    生成自动工具:make autotools

    系统环境配置:./configure

    编译:make -j$(getconf_NPROCESSORS_ONLN)

    安装:sudo make install

    依次执行以上命令后,LTP已经被正确安装到你的Linux系统中,默认安装位于/opt/ltp/。

    [wxs@bogon ltp]$ cd /opt/ltp/
    [wxs@bogon ltp]$ ls
    bin         runltp         runtest          share      testscripts  Version
    IDcheck.sh  runltplite.sh  scenario_groups  testcases  ver_linux

    需要注意的是,我们通过git clone命令下载的位于home目录下的ltp文件夹为ltp源码文件夹,我将在后文简称为源码包。

    通过执行一系列命令安装到/opt目录下的ltp文件夹为ltp安装文件夹,我将在后文简称为安装包。
    1.3 目录结构
    1.3.1 源码包

    LTP源码包目录结构描述如下:
    名称     说明
    INSTALL     LTP安装配置指导文档
    README     LTP介绍
    CREDITS     记录对LTP有很大贡献的人
    COPYING     GNU公开许可证
    ChangeLog     描述版本变化
    ltpmenu     规划执行LTP的图形化界面接口
    Makefile     LTP顶层目录的Makefile,负责编译安装pan、testcases和tools
    runalltests.sh     顺序运行全部测试用例并且报告结果的脚本
    doc/*     工程文档包含工具和库函数使用手册,描述各种测试
    include/*     通用的头文件目录
    lib/*     通用的函数目录
    testcases/*     包含在LTP下运行和bin目录下的所有测试用例和链接
    testscripts/*     存放分组的测试脚本
    runtest/*     为自动化测试提供命令列表
    pan/*     测试的驱动装置,具备随机和并行测试的能力
    scratch/*     存放零碎测试
    tools/*     存放自动化测试脚本和辅助工具

    LTP测试套件包含以下内容:

    [wxs@bogon ~]$ cd ltp/testcases/
    [wxs@bogon testcases]$ ls
    commands  demoA  kernel  Makefile  network               realtime
    cve       kdump  lib     misc      open_posix_testsuite

     

    目录结构描述如下:
    名称     说明
    commands     常用命令测试
    kernel     内核模块及其相关模块
    kdump     内核现崩溃转储测试
    network     网络测试
    realtime     系统实时性测试
    open_posix_testsuite     posix标准测试
    misc     崩溃、核心转出、浮点运算等测试
    1.3.2 安装包

    LTP安装包目录结构描述如下:
    名称     说明
    bin     存放LTP测试的一些辅助脚本
    results     测试结果默认存储目录
    testcases     测试项集
    output     测试日志默认存储目录
    share     脚本使用说明目录
    runtest     测试驱动(用于链接testscripts内的测试脚本和testcases测试项目)
    lib     通用的库函数目录
    1.4 测试框架
    1.4.1 整体测试流程

    ltp安装包根目录下的runltp脚本是LTP自动测试系统的入口,其提供了一系列参数选项,允许用户设定测试环境制定测试集、控制测试结果输出方式和路径等,运行runltp会生成指定的测试列表并调用测试驱动PAN来开始测试,待执行完毕后根据PAN返回的结果来生成报告。

    PAN是LTP的一组测试驱动程序,负责实际测试的执行,根据runltp传递的参数和测试列表来依次执行测试,输出执行过程中的详细信息,对每个测试用例的执行结果进行统计,并将整体测试结果返回给runltp。

    整体测试流程
    1.4.2 测试用例执行流程

    测试用例执行流程

    测试结果的输出类型如下:
    Type     Description
    BROK     程序执行中途发生错误而使测试遭到破坏
    CONF     测试环境不满足而跳过执行
    WARN     测试中途发生异常
    INFO     输出通用测试信息
    PASS     测试成功
    FAIL     测试失败
    1.4.3 测试库

    LTP目前测试库存在新旧测试库交替的情况,本文均采用新测试库的框架,具体的更新说明可以参考更新文档An update on the Linux Test Project。

    测试库
    Old Library     New Library
    测试用例在执行时调用测试库的API     在测试库维护的子进程中回调测试用例
    setup()中逐一调用API完成测试准备     setup()中测试属性以结构体变量定义
    main()定义在每个测试用例当中     main()定义在测试库中
    cleanup()中不能调用SAFE函数     cleanup()中允许调用SAFE函数

    这里以umount02为例,比较新旧框架的区别:

    旧框架代码:

     

    //Example using the old LTP library
    //https://lwn.net/Articles/708250/
    
    #include <errno.h>
    #include <sys/mount.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <sys/fcntl.h>
    #include <pwd.h>
    
    #include "test.h"
    #include "safe_macros.h"
    
    static void setup(void);
    static void cleanup(void);
    
    char *TCID = "umount02";
    
    #define DIR_MODE        S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH
    #define FILE_MODE        S_IRWXU | S_IRWXG | S_IRWXO
    #define MNTPOINT        "mntpoint"
    
    static char long_path[PATH_MAX + 2];
    static int mount_flag;
    static int fd;
    
    static const char *device;
    
    static struct test_case_t {
        char *err_desc;
        char *mntpoint;
        int exp_errno;
        char *exp_retval;
    } testcases[] = {
        {"Already mounted/busy", MNTPOINT, EBUSY, "EBUSY"},
        {"Invalid address space", NULL, EFAULT, "EFAULT"},
        {"Directory not found", "nonexistent", ENOENT, "ENOENT"},
        {"Invalid  device", "./", EINVAL, "EINVAL"},
        {"Pathname too long", long_path, ENAMETOOLONG, "ENAMETOOLONG"}
    };
    
    int TST_TOTAL = ARRAY_SIZE(testcases);
    
    int main(int ac, char **av)
    {
        int lc, i;
    
        tst_parse_opts(ac, av, NULL, NULL);
    
        setup();
    
        for (lc = 0; TEST_LOOPING(lc); lc++) {
            tst_count = 0;
    
            for (i = 0; i < TST_TOTAL; ++i) {
                TEST(umount(testcases[i].mntpoint));
    
                if ((TEST_RETURN == -1) && (TEST_ERRNO == testcases[i].exp_errno)) {
                    tst_resm(TPASS, "umount(2) expected failure; "
                                "Got errno - %s : %s",
                                testcases[i].exp_retval,
                                testcases[i].err_desc);
                } else {
                    tst_resm(TFAIL, "umount(2) failed to produce "
                                "expected error; %d, errno:%s got %d",
                                testcases[i].exp_errno,
                                testcases[i].exp_retval, TEST_ERRNO);
                }
            }
        }
    
        cleanup();
        tst_exit();
    }
    
    static void setup(void)
    {
        const char *fs_type;
    
        tst_sig(FORK, DEF_HANDLER, cleanup);
    
        tst_require_root();
    
        tst_tmpdir();
    
        fs_type = tst_dev_fs_type();
        device = tst_acquire_device(cleanup);
    
        if (!device)
            tst_brkm(TCONF, cleanup, "Failed to obtain block device");
    
        tst_mkfs(cleanup, device, fs_type, NULL, NULL);
    
        memset(long_path, 'a', PATH_MAX + 1);
    
        SAFE_MKDIR(cleanup, MNTPOINT, DIR_MODE);
    
        if (mount(device, MNTPOINT, fs_type, 0, NULL))
            tst_brkm(TBROK | TERRNO, cleanup, "mount() failed");
    
        mount_flag = 1;
    
        fd = SAFE_OPEN(cleanup, MNTPOINT "/file", O_CREAT | O_RDWR);
    
        TEST_PAUSE;
    }
    
    static void cleanup(void)
    {
        if (fd > 0 && close(fd))
            tst_resm(TWARN | TERRNO, "Failed to close file");
    
        if (mount_flag && tst_umount(MNTPOINT))
            tst_resm(TWARN | TERRNO, "umount() failed");
    
        if (device)
            tst_release_device(device);
    
        tst_rmdir();
    }

    新框架代码:

     

    //Example using the new LTP library
    //https://lwn.net/Articles/708251/
    
    #include <errno.h>
    #include <string.h>
    #include <sys/mount.h>
    #include "tst_test.h"
    
    #define MNTPOINT        "mntpoint"
    
    static char long_path[PATH_MAX + 2];
    static int mount_flag;
    static int fd;
    
    static struct tcase {
            const char *err_desc;
            const char *mntpoint;
            int exp_errno;
    } tcases[] = {
            {"Already mounted/busy", MNTPOINT, EBUSY},
            {"Invalid address", NULL, EFAULT},
            {"Directory not found", "nonexistent", ENOENT},
            {"Invalid  device", "./", EINVAL},
            {"Pathname too long", long_path, ENAMETOOLONG}
    };
    
    static void verify_umount(unsigned int n)
    {
            struct tcase *tc = &tcases[n];
    
            TEST(umount(tc->mntpoint));
    
            if (TEST_RETURN != -1) {
                    tst_res(TFAIL, "umount() succeeds unexpectedly");
                    return;
            }
    
            if (tc->exp_errno != TEST_ERRNO) {
                    tst_res(TFAIL | TTERRNO, "umount() should fail with %s",
                            tst_strerrno(tc->exp_errno));
                    return;
            }
    
            tst_res(TPASS | TTERRNO, "umount() fails as expected: %s",
                    tc->err_desc);
    }
    
    static void setup(void)
    {
            memset(long_path, 'a', PATH_MAX + 1);
    
            SAFE_MKFS(tst_device->dev, tst_device->fs_type, NULL, NULL);
            SAFE_MKDIR(MNTPOINT, 0775);
            SAFE_MOUNT(tst_device->dev, MNTPOINT, tst_device->fs_type, 0, NULL);
            mount_flag = 1;
    
            fd = SAFE_CREAT(MNTPOINT "/file", 0777);
    }
    
    static void cleanup(void)
    {
            if (fd > 0 && close(fd))
                    tst_res(TWARN | TERRNO, "Failed to close file");
    
            if (mount_flag)
                    tst_umount(MNTPOINT);
    }
    
    static struct tst_test test = {
            .tid = "umount02",
            .tcnt = ARRAY_SIZE(tcases),
            .needs_root = 1,
            .needs_tmpdir = 1,
            .needs_device = 1,
            .setup = setup,
            .cleanup = cleanup,
            .test = verify_umount,
    };

    1.5 测试执行
    1.5.1 整体测试

    我们可以测试所有的测试集,直接运行runltp命令将测试ltp/scenario_groups/default中的所有测试集,一次测试约2~3小时。

    [wxs@bogon ltp]$ cd /opt/ltp
    [wxs@bogon ltp]$ sudo ./runltp

     

    当然我们可以只测试某个测试集,测试集可以在ltp/runtest/下查看。

    [wxs@bogon ltp]$ ls runtest/
    admin_tools         ipc                    net_stress.ipsec_udp
    can                 kernel_misc            net_stress.multicast
    cap_bounds          ltp-aiodio.part1       net_stress.route
    commands            ltp-aiodio.part2       net.tcp_cmds
    connectors          ltp-aiodio.part3       net.tirpc_tests
    containers          ltp-aiodio.part4       network_commands
    controllers         ltp-aio-stress.part1   nptl
    cpuhotplug          ltp-aio-stress.part2   numa
    crashme             ltplite                pipes
    cve                 lvm.part1              power_management_tests
    dio                 lvm.part2              power_management_tests_exclusive
    dma_thread_diotest  math                   pty
    fcntl-locktests     mm                     quickhit
    filecaps            modules                sched
    fs                  net.features           scsi_debug.part1
    fs_bind             net.ipv6               securebits
    fs_ext4             net.ipv6_lib           smack
    fs_perms_simple     net.multicast          stress.part1
    fs_readonly         net.nfs                stress.part2
    fsx                 net.rpc                stress.part3
    hugetlb             net.rpc_tests          syscalls
    hyperthreading      net.sctp               syscalls-ipc
    ima                 net_stress.appl        timers
    input               net_stress.broken_ip   tpm_tools
    io                  net_stress.interface   tracing
    io_cd               net_stress.ipsec_icmp
    io_floppy           net_stress.ipsec_tcp
    [wxs@bogon ltp]$ sudo ./runltp -f modules

     

    需要注意的是,如果我们测试某个测试集,runltp需要指定-f参数。
    1.5.2 单独测试

    如果我们不想测试某个测试集,只想测试某个单独的测试,可以采用安装包测试或者源码包测试。下面以access01为例,讲解单独测试。
    1.5.2.1 安装包测试

    进入安装包,执行以下命令即可。

    [wxs@bogon ltp]$ cd /opt/ltp/
    [wxs@bogon ltp]$ sudo ./runltp -s access01

     

    需要注意的是,如果我们测试某个测试,runltp需要指定-s参数。
    1.5.2.2 源码包测试

    进入源码包,找到access01的位置,直接执行./access01即可。

    [wxs@bogon access]$ cd ~/ltp/testcases/kernel/syscalls/access/
    [wxs@bogon access]$ sudo ./access01

     

    我们看到access01位于testcases目录下,实际上testcases目录下每个文件都是一个完整的可执行程序,可以在编译后的源码路径直接执行。
    1.6 牛刀小试

    本节中牵扯到的项目均位于源码包testcases下自建的demoA文件夹中。测试方法均采用测试集测试(C实现的测试用例可以采用源码测试和测试集测试,Shell实现的测试用例只可以采用测试集测试)。

    [wxs@bogon ~]$ cd ~/ltp/testcases/
    [wxs@bogon testcases]$ mkdir demoA
    [wxs@bogon testcases]$ cd demoA/
    [wxs@bogon demoA]$ pwd
    /home/wxs/ltp/testcases/demoA

     

    1.6.1 验证sqrt() 函数

    参考1.3.3节中给出的示例代码,编写测试用例sqrt.c:

    #include <errno.h>
    #include <string.h>
    #include <sys/mount.h>
    #include "tst_test.h"
    
    static struct tcase {
        const int input;
        const int output;
    } tcases[] = {
            {-1,1},
            {9,3}
    };
    
    static void testSqrt(unsigned int n){
        struct tcase *tc = &tcases[n];
    
        TEST(sqrt(tc->input));
    
        if (TEST_RETURN != tc->output) {
            tst_res(TFAIL, "sqrt() failed");
            return;
        }
        tst_res(TPASS, "sqrt() succeeds");
    }
    
    static struct tst_test test = {
            .tid = "testSqrt",
            .tcnt = ARRAY_SIZE(tcases),
            .test = testSqrt,
    };

    参考testcases目录下的其他Makefile文件,编写Makefile:

    top_srcdir ?= ../..
    
    include $(top_srcdir)/include/mk/testcases.mk
    
    include $(top_srcdir)/include/mk/generic_leaf_target.mk
    
    sqrt:  LDLIBS += -lm

     

    需要注意的是,这里的top_srcdir指的是ltp目录,因为demoA目录位于ltp目录的内两层,所以使用了../..。

    还需要注意的是,要想成功使用sqrt命令必须附加-lm参数,在Makefile中已经体现这一点。

    执行make命令,生成可执行文件sqrt:

    [wxs@bogon demoA]$ make
    make -C "/home/wxs/ltp/lib" -f "/home/wxs/ltp/lib/Makefile" all
    make[1]: 进入目录“/home/wxs/ltp/lib”
    make[2]: 进入目录“/home/wxs/ltp/lib/newlib_tests”
    make[2]: 对“all”无需做任何事。
    make[2]: 离开目录“/home/wxs/ltp/lib/newlib_tests”
    make[2]: 进入目录“/home/wxs/ltp/lib/tests”
    make[2]: 对“all”无需做任何事。
    make[2]: 离开目录“/home/wxs/ltp/lib/tests”
    make[1]: 离开目录“/home/wxs/ltp/lib”
    gcc -g -O2 -g -O2 -fno-strict-aliasing -pipe -Wall -W -Wold-style-definition -D_FORTIFY_SOURCE=2 -I../../include -I../../include -I../../include/old/   -L../../lib  sqrt.c   -lltp -lm -o sqrt
    sqrt.c: 在函数‘testSqrt’中:
    sqrt.c:17:2: 警告:隐式声明函数‘sqrt’ [-Wimplicit-function-declaration]
      TEST(sqrt(tc->input));
      ^
    In file included from sqrt.c:4:0:
    sqrt.c:17:7: 警告:隐式声明与内建函数‘sqrt’不兼容 [默认启用]
      TEST(sqrt(tc->input));
           ^
    ../../include/tst_test.h:176:17: 附注:in definition of macro ‘TEST’
       TEST_RETURN = SCALL; \
                     ^

    这里可以直接执行命令./sqrt来运行这个测试用例,但是对于下节的shell测试用例就不能这样做了,本节我都将它写在自定义测试集中。

    首先复制可执行文件sqrt到安装包的testcases/bin/目录下:

    [wxs@bogon demoA]$ sudo cp sqrt /opt/ltp/testcases/bin/

     

    然后进入安装包的runtest目录下,编写自定义测试用例集demoA:

    [wxs@bogon runtest]$ cat demoA
    sqrt sqrt
    
    

    测试用例集中每个测试用例包括两部分:前部分为昵称,后部分为testcases/bin/目录下的文件名,中间用空格分隔。

    进入上层目录,执行整体测试命令:

     

    [wxs@bogon runtest]$ cd ..
    [wxs@bogon ltp]$ sudo ./runltp -f demoA

    执行后程序会输出一大段,我们只需关心最重要的部分。我定义从<<<test_start>>>到<<<test_end>>>中间的内容为test体,后文均以此称呼:···
     

    <<<test_start>>>
    tag=sqrt stime=1506106767
    cmdline="sqrt"
    contacts=""
    analysis=exit
    <<<test_output>>>
    tst_test.c:915: INFO: Timeout per run is 0h 05m 00s
    incrementing stop
    sqrt.c:20: FAIL: sqrt() failed
    sqrt.c:23: PASS: sqrt() succeeds
    
    Summary:
    passed   1
    failed   1
    skipped  0
    warnings 0
    <<<execution_status>>>
    initiation_status="ok"
    duration=0 termination_type=exited termination_id=1 corefile=no
    cutime=0 cstime=0
    <<<test_end>>>

    可以看到,两个测试点一个FAIL,一个PASS。对照sqrt.c文件中给出的测试数据,发现测试没有问题。至此,一个简单的LTP测试用例就完成了。
    1.6.2 验证echo命令

    重新回到demoA文件夹中,编写echo.sh文件,代码可以参考源码包中testcases/commands中其他的测试用例:#测试函数执行次数
    TST_CNT=1
    #测试用例启动函数

    TST_TESTFUNC=do_test
    . tst_test.sh
    
    echo_test()
    {
        local std_in=$1
        local echo_cmd=$(echo $std_in > a.out)
        local echo_res=$std_in
        local cat_res=$(cat a.out)
    
        if [ $echo_res = $cat_res ]
        then
            tst_res TPASS "$echo_cmd sucessed"
        else
            tst_res TFAIL "$echo_cmd failed"
        fi
    }
    
    do_test()
    {
        echo_test "hello\tworld"
    }
    
    tst_run

    为echo.sh添加可执行权限,并复制到安装包中的testcases/bin/目录中。

    这里一定要注意,不可以在当前路径直接./echo.sh执行测试用例!!

    [wxs@bogon demoA]$ pwd
    /home/wxs/ltp/testcases/demoA
    [wxs@bogon demoA]$ sudo chmod +x echo.sh
    [wxs@bogon demoA]$ sudo cp echo.sh /opt/ltp/testcases/bin/

     

    修改上一节中编写的demoA测试用例集,将echo.sh测试用例添加进去:

    [wxs@bogon demoA]$ cd /opt/ltp/runtest/
    [wxs@bogon runtest]$ cat demoA
    sqrt sqrt
    echo echo.sh

    注意了,此时测试用例集中包含了两个测试用例,那么后面运行该测试用例集将会执行这两个测试用例。

    进入上层目录,执行整体测试命令:

    [wxs@bogon runtest]$ cd ..
    [wxs@bogon ltp]$ sudo ./runltp -f demoA

    结果输出依然很多,我们依然只看最关键的部分:

    ··· <<<test_output>>> tst_test.c:915: INFO: Timeout per run is 0h 05m 00s sqrt.c:20: FAIL: sqrt() failed sqrt.c:23: PASS: sqrt() succeeds Summary: passed 1 failed 1 skipped 0 warnings 0 <<<execution_status>>> initiation_status="ok" duration=1 termination_type=exited termination_id=1 corefile=no cutime=0 cstime=0 <<<test_end>>> <<<test_start>>> tag=echo stime=1506107663 cmdline="echo.sh" contacts="" analysis=exit <<<test_output>>> incrementing stop 1 TPASS: sucessed Summary: passed 1 failed 0 skipped 0 warnings 0 <<<execution_status>>> initiation_status="ok" duration=0 termination_type=exited termination_id=0 corefile=no cutime=2 cstime=5 <<<test_end>>> ···
    

     

     

    本次测试输出包含两个test体,第一个test体我们在上一节已经说过了,我们直接看第二个test体。该体中共计有1个测试点,状态为TPASS。

    对照echo.sh中的测试点,发现没有问题。

    至此你已经学会了最基本的创建C和Shell的测试用例以及整体测试的方法,本章内容你已经完成了。
     

    展开全文
  • LTP使用和分析

    千次阅读 2021-02-08 11:15:11
    1.下载LTP LTP 项目目前位于 GitHub,项目地址:https://github.com/linux-test-project/ltp 。 获取最新版可以执行以下命令: git clone https://github.com/linux-test-project/ltp.git 2.安装相关软件包 sudo ...

    一.安装及编译流程

    1.下载LTP

    LTP 项目目前位于 GitHub,项目地址:https://github.com/linux-test-project/ltp
    获取最新版可以执行以下命令:

    git clone https://github.com/linux-test-project/ltp.git
    

    2.安装相关软件包

    sudo apt-get install autoconf  automake  autotools-dev m4 gcc libssl-dev libaio-dev flex bison libcap-dev libregf-dev libdts-dev libdtools-ocaml-dev libnuma-dev libacl1-dev automake autoconf dma libmm-dev jfsutils libselinux1-dev xfslibs-dev netconfd numactl numad rpcbind nfs-kernel-server rsh-server sysstat
    

    3.安装LTP步骤

    cd ltp
    make autotools
    ./configure
    sudo make all
    sudo make install
    

    依次执行以上命令后,LTP 已经被正确安装到你的 Linux 系统中,默认安装位于 /opt/ltp/。

    4.注意

    需要注意的是,我们通过 git clone 命令下载的位于home目录下的ltp文件夹为 ltp源码文件夹,我将在后文简称为源码包。
    通过执行一系列命令安装到 /opt 目录下的 ltp 文件夹为ltp安装文件夹,我将在后文简称为安装包。

    二.目录结构

    1.源码包

    1.1.LTP 源码包目录结构描述

    名称说明
    INSTALLLTP安装配置指导文档
    READMELTP介绍
    CREDITS记录对LTP有很大贡献的人
    COPYINGGNU公开许可证
    ChangeLog描述版本变化
    ltpmenu规划执行LTP的图形化界面接口
    MakefileLTP顶层目录的Makefile,负责编译安装pan、testcases和tools
    runalltests.sh序运行全部测试用例并且报告结果的脚本
    doc/*工程文档包含工具和库函数使用手册,描述各种测试
    include/*通用的头文件目录
    lib/*通用的函数目录
    testcases/*包含在LTP下运行和bin目录下的所有测试用例和链接
    testscripts/*存放分组的测试脚本
    runtest/*为自动化测试提供命令列表
    pan/*测试的驱动装置,具备随机和并行测试的能力
    scratch/*存放零碎测试
    tools/*存放自动化测试脚本和辅助工具

    1.2.LTP 测试套件包含的内容

    $ cd ltp/testcases/
    $ ls
    commands  demoA  kernel  Makefile  network               realtime
    cve       kdump  lib     misc      open_posix_testsuite
    
    名称说明
    commands常用命令测试
    kernel内核模块及其相关模块
    kdump内核现崩溃转储测试
    network网络测试
    realtime系统实时性测试
    open_posix_testsuiteposix标准测试
    misc崩溃、核心转出、浮点运算等测试

    2.安装包

    LTP安装包目录结构描述如下:

    名称说明
    bin存放LTP测试的一些辅助脚本
    results测试结果默认存储目录
    testcases测试项集
    output测试日志默认存储目录
    share脚本使用说明目录
    runtest测试驱动(用于链接testscripts内的测试脚本和testcases测试项目)
    lib通用的库函数目录

    三.测试执行

    1.整体测试

    可以测试所有的测试集,直接运行 runltp 命令将测试 ltp/scenario_groups/default 中的所有测试集,一次测试约 3 小时。

    $ cd /opt/ltp
    $ sudo ./runltp
    也可以使用如下命令
    $sudo ./runltp -t 8h |tee ~/runltp_test.log
    -t:指定测试的持续时间
                      -t 60s = 60 seconds
                      -t 45m = 45 minutes
                      -t 24h = 24 hour
                      -t 2d  = 2 days
    |tee ~/runltp_test.log
    把测试的日志打印在终端的同时收集到家目录下的runltp_test.log文件
    

    查看测试结果

    cd results/
    vim LTP_RUN_ON-XXXX.log
    可以到最后的统计
    Total Tests: 2173
    Total Skipped Tests:xxx
    Total Failures: xxx
    Kernel Version: xxx
    Machine Architecture: mips64
    Hostname: xxx
    

    在output目录可以查看测试的fail项和tconf项
    LTP_RUN_ON-XXXX.failed
    LTP_RUN_ON-XXXX.tconf

    2.测试集测试

    当然我们可以只测试某个测试集,测试集可以在 ltp/runtest/ 下查看。
    需要注意的是,如果我们测试某个测试集,runltp 需要指定 -f 参数。
    例:

    $sduo ./runltp -f mm //测试内存
    

    3.单独测试

    如果我们不想测试某个测试集,只想测试某个单独的测试,可以采用安装包测试或者源码包测试。下面以 access01 为例,讲解单独测试。

    3.1.安装包测试

    进入安装包,执行以下命令即可.

    $ cd /opt/ltp/
    $ sudo ./runltp -s access01
    

    需要注意的是,如果我们测试某个测试,runltp 需要指定 -s 参数。

    3.2.源码包测试

    进入源码包,找到acess01胡位置,直接执行./access01即可.

    $ cd ~/work/ltp/testcases/kernel/syscalls/access/
    $ sudo ./access01
    

    我们看到access01位于testcases目录下,实际上testcases目录下每个文件都是一个完整的可执行程序,可以在编译后的源码路径直接执行

    4.测试结果

    测试结果的输出类型如下:

    TypeDescription
    BROK程序执行中途发生错误而使测试遭到破坏
    CONF测试环境不满足而跳过执行
    WARN测试中途发生异常
    INFO输出通用测试信息
    PASS测试成功
    FAIL测试失败

    5.测试结果分析

    执行命令后,会输出许多内容,我们只需要关心最重要的部分.<<<test_start>>到<<<test_end>>中间的内容。这是一个小测试项的开始和结束标志,中间会打印测试的结果以及提示信息等。

    5.1.例一测试通过的项

    <<<test_start>>>
    tag=read_all_dev stime=1611898350
    cmdline="read_all -d /dev -p -q -r 3"
    contacts=""
    analysis=exit
    <<<test_output>>>
    tst_test.c:1263: TINFO: Timeout per run is 0h 05m 00s
    read_all.c:446: TPASS: Finished reading files
      
    Summary:
    passed   1
    failed   0
    broken   0
    skipped  0
    warnings 0
    <<<execution_status>>>
    initiation_status="ok"
    duration=0 termination_type=exited termination_id=0 corefile=no
    cutime=1 cstime=1
    <<<test_end>>>   
    

    根据这个信息我们主要分析哪些呢?
    1.查看测试项:tag=read_all_dev
    2.查看测试使用的命令:cmdline=read_all -d /dev -p -q -r 3
    使用的read_all可执行文件参数是-d /dev -p -q -r 3 (参数的含义可以在源码中找到read_all.c),许多测试项是无参数的。
    3.查看这个测试项一共有多个测试:Summary (上述的信息中只有passed=1其余是0,即此测试项一共只有1个测试)
    4.如果3中有除了passed,需要查看test_output输出的信息,然后分析异常原因。

    5.2.例二测试失败项

    <<<test_start>>>
     tag=read_all_sys stime=1611898352
     cmdline="read_all -d /sys -q -r 3"
     contacts=""
     analysis=exit
     <<<test_output>>>
     tst_test.c:1263: TINFO: Timeout per run is 0h 05m 00s
     Test timeouted, sending SIGKILL!
     tst_test.c:1308: TINFO: If you are running on slow machine, try exporting LTP_TIMEOUT_MUL > 1
     tst_test.c:1309: TBROK: Test killed! (timeout?)
     
     Summary:
     passed   0
     failed   0
     broken   1
     skipped  0
     warnings 0
     <<<execution_status>>>
     initiation_status="ok"
     duration=300 termination_type=exited termination_id=2 corefile=no
     cutime=3 cstime=5
     <<<test_end>>>
    

    通过上述信息可以看出:
    1.测试项是read_all_sys
    2.使用测试命令是read_all 参数是-d /sys -q -r 3
    3.只有一个测试,并且出现了异常”broken 1“
    4.查看test_output信息:提示测试是被杀死了,并不是正常结束。还提示可能是超时了。
    从表面的信息是测试超时,测试进程被杀死。但是要找到根因,这需要进入源码分析。

    如何分析?
    1.找到测试项源码:
    使用测试执行的文件搜索

    uos@uos:~/ltp$ find -name read_all
    ./testcases/kernel/fs/read_all
    ./testcases/kernel/fs/read_all/read_all
    uos@uos:~/ltp$ cd ./testcases/kernel/fs/read_all/
    uos@uos:~/ltp/testcases/kernel/fs/read_all$ ls
    Makefile  read_all  read_all.c
    

    可以看出read_all这个执行文件是由read_all.c编译生成的。
    2.打开read_all.c文件
    查看测试项的功能 --> 了解参数的含义 --> 打点跟踪流程 --> 定位卡点(在哪里等待超时) --> 分析什么原因导致超时等待

    展开全文
  • LTP使用说明

    2019-08-21 10:16:02
    pyltp - 哈工大语言云python接口使用说明

    分句 - Sentence Splitter

    from pyltp import SentenceSplitter
    sentence = SentenceSplitter.split('我是逗号,我是句号。我是问号?我是感叹号!')
    print '\n'.join(sentence)
    

    分词 - Segmentor

    import os
    LTP_DATA_DIR = '/path/to/your/ltp_data'  # ltp模型目录的路径
    cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')  # 分词模型路径,模型名称为`cws.model`
    
    from pyltp import Segmentor
    segmentor = Segmentor()  # 初始化实例
    segmentor.load(cws_model_path)  # 加载模型
    words = segmentor.segment('欧几里得是西元前三世纪的希腊数学家。')  # 分词
    print ' '.join(words)
    segmentor.release()  # 释放模型
    

    这里可以添加用户自定义词典

    segmentor = Segmentor()  # 初始化实例
    segmentor.load_with_lexicon(cws_model_path, '/path/to/your/lexicon') # 加载模型,参数lexicon是自定义词典的文件路径
    words = segmentor.segment('欧几里得是西元前三世纪的希腊数学家。')
    print ' '.join(words)
    segmentor.release()
    

    词性标注 - Postagger

    pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model')  # 词性标注模型路径,模型名称为`pos.model`
    
    from pyltp import Postagger
    postagger = Postagger() # 初始化实例
    postagger.load(pos_model_path)  # 加载模型
    
    words = ['欧几里得', '是', '西元前', '三', '世纪', '的', '希腊', '数学家', '。']
    postags = postagger.postag(words)  # 词性标注
    
    print ' '.join(postags)
    postagger.release()  # 释放模型
    

    命名实体识别 - Named Entity Recognizer

    ner_model_path = os.path.join(LTP_DATA_DIR, 'ner.model')  # 命名实体识别模型路径,模型名称为`ner.model`
    
    from pyltp import NamedEntityRecognizer
    recognizer = NamedEntityRecognizer() # 初始化实例
    recognizer.load(ner_model_path)  # 加载模型
    
    words = ['欧几里得', '是', '西元前', '三', '世纪', '的', '希腊', '数学家', '。']
    postags = ['nh', 'v', 'nt', 'm', 'n', 'u', 'ns', 'n', 'wp']
    nertags = recognizer.recognize(words, postags)  # 命名实体识别
    
    print ' '.join(nertags)
    recognizer.release()  # 释放模型
    

    依存句法分析 - Parser

    par_model_path = os.path.join(LTP_DATA_DIR, 'parser.model')  # 依存句法分析模型路径,模型名称为`parser.model`
    
    from pyltp import Parser
    parser = Parser() # 初始化实例
    parser.load(par_model_path)  # 加载模型
    
    words = ['欧几里得', '是', '西元前', '三', '世纪', '的', '希腊', '数学家', '。']
    postags = ['nh', 'v', 'nt', 'm', 'n', 'u', 'ns', 'n', 'wp']
    arcs = parser.parse(words, postags)  # 句法分析
    
    rely_id = [arc.head for arc in arcs]    # 提取依存父节点id
    relation = [arc.relation for arc in arcs]   # 提取依存关系
    heads = ['Root' if id == 0 else words[id-1] for id in rely_id]  # 匹配依存父节点词语
    
    for i in range(len(words)):
        print relation[i] + '(' + words[i] + ', ' + heads[i] + ')'
    
    parser.release()  # 释放模型
    
    展开全文
  • ltp使用

    2018-03-12 19:14:46
    1、Windows 下cmd使用2、linux 下pyltp安装使用 2.1 pip install pyltp
  • 中文句法分析及LTP使用

    万次阅读 多人点赞 2019-10-17 16:56:54
    二、基于Python的LTP句法分析 1、LTP基础 2、pyltp安装 3、pyltp实现句法分析 三、基于C++的LTP句法分析 1、LTP源码和模型 2、LTP的C++源码编译及测试 3、在Linux下使用动态库生成可执行程序 4、 构建基于...
  • LTP套件使用方法详解

    2021-05-10 16:22:27
    初次接触LTP (Linux Test Project) 被...经过反复摸索终于成功了,现详述如下,还望各位看客不要嫌我写得罗嗦,希望对初次安装使用LTP测试套的人有所帮助。一、下载LTP测试套可以从http://sourceforge.net/projects/...
  • 【自然语言处理工具箱 LTP 】pyltp 使用使用前请先下载完整模型请注意编码分句分词使用分词外部词典词性标注命名实体识别 pyltp 是 LTP 的 Python 封装,提供了分词,词性标注,命名实体识别,依存句法分析,语义...
  • 哈工大LTP使用

    2020-05-06 20:22:13
    'C:\\Users\\28612\\Desktop\\SentimentRecommendation\\tool\\LTP\\ltp_data_v3.4.0\\' def draw(words, postags, arcs): par_result = '' for i in range(len(words)): if arcs[i].head == 0: arcs[i].relation = ...
  • LTP入门操作

    2021-07-23 17:01:59
    LTP 安装直接pip install ltp,这个是官方地址https://ltp.readthedocs.io/zh_CN/latest/quickstart.html,里面有详细的介绍,我下面的代码只是方便我使用以及按照自己的需求进行修改 from ltp import LTP ltp = LTP...
  • LTP工具的详细使用介绍

    万次阅读 2019-04-11 17:21:05
    开始使用LTP LTP 的下载和安装 依赖:CMake 在 Windows (MSVC) 下编译 在 Linux, macOS 和 Cygwin 下编译 编译结果说明 使用ltp_test和xxx_cmdline LTP模型文件 ltp_test主程序 xxx_cmdline 细节 兼容性测试 ...
  • ltp4.0 6月份放出来了,一个模型进行多任务学习,立马测试了一下效果,确实不错。 1、首先下载docker,使用pytorch1.4版本,python版本3.7 https://hub.docker.com/r/pytorch/pytorch/tags docker pull pytorch/...
  • 请问我用segmentor单独载入模型和增量模型都成功,用customized_segmentor载入就提示CustomizedSegmentor: Model not...customized_segmentor.load(cws_model_path,'E:\pyfile\zhishichouqu\ltp_data\cws2.model') ```
  • LTP(Language Technology Platform) 提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。 官方教程:...
  • 但是在windows下需要安装vs并且还得做一些配置, 因为我服务的人都是在windows下办公, 需要让他们能够在windows下使用ltp, 所以才有了这篇笔记. 我的方案有两个: 在win10 的bash下安装ltp, 然后启动ltp的server, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,642
精华内容 3,856
关键字:

ltp使用