diff --git a/test/app-luatest/gh_1700_abort_recording_on_fiber_switch_test.lua b/test/app-luatest/gh_1700_abort_recording_on_fiber_switch_test.lua
index 86b7131096ac6b7636cd39eaeb40aed2f897236b..f9d0120e556a65fa30d35eb141352c196f764f06 100644
--- a/test/app-luatest/gh_1700_abort_recording_on_fiber_switch_test.lua
+++ b/test/app-luatest/gh_1700_abort_recording_on_fiber_switch_test.lua
@@ -1,6 +1,6 @@
 local t = require('luatest')
 local treegen = require('luatest.treegen')
-local justrun = require('test.justrun').tarantool
+local justrun = require('luatest.justrun').tarantool
 local pathjoin = require('fio').pathjoin
 
 local g = t.group()
diff --git a/test/app-luatest/gh_4975_errors_in_init_scripts_are_stripped_test.lua b/test/app-luatest/gh_4975_errors_in_init_scripts_are_stripped_test.lua
index 0ef38cba0d9c3b9b238735e48a156dd543d35bce..2f8a434a62ccbe4d4224480da270d985f334394d 100644
--- a/test/app-luatest/gh_4975_errors_in_init_scripts_are_stripped_test.lua
+++ b/test/app-luatest/gh_4975_errors_in_init_scripts_are_stripped_test.lua
@@ -1,5 +1,5 @@
 local t = require('luatest')
-local justrun = require('test.justrun')
+local justrun = require('luatest.justrun')
 
 local g = t.group('gh-4975')
 
diff --git a/test/app-luatest/gh_5983_jit_library_smoke_tests_test.lua b/test/app-luatest/gh_5983_jit_library_smoke_tests_test.lua
index fb7d7d957c1a02b52ed2a8c46fd4ab4b98f22733..a53e805850506bc14919c38cd7576ffe7cae3797 100644
--- a/test/app-luatest/gh_5983_jit_library_smoke_tests_test.lua
+++ b/test/app-luatest/gh_5983_jit_library_smoke_tests_test.lua
@@ -1,6 +1,6 @@
 local t = require('luatest')
 local treegen = require('luatest.treegen')
-local justrun = require('test.justrun').tarantool
+local justrun = require('luatest.justrun').tarantool
 
 local g = t.group()
 
diff --git a/test/app-luatest/module_search_test.lua b/test/app-luatest/module_search_test.lua
index 33d2080e15aebf68e76d00225db8c98601edc212..bcc165b872ef687ce31ede4f19c11e021048493b 100644
--- a/test/app-luatest/module_search_test.lua
+++ b/test/app-luatest/module_search_test.lua
@@ -2,7 +2,7 @@ local fio = require('fio')
 
 local t = require('luatest')
 local treegen = require('luatest.treegen')
-local justrun = require('test.justrun')
+local justrun = require('luatest.justrun')
 
 local g = t.group()
 
diff --git a/test/app-luatest/override_misc_test.lua b/test/app-luatest/override_misc_test.lua
index 04a2be63421df248d6d01462f17d75a61e4c87be..2ce3802ce1ffea59c36070dca6e2cef407e03534 100644
--- a/test/app-luatest/override_misc_test.lua
+++ b/test/app-luatest/override_misc_test.lua
@@ -1,6 +1,6 @@
 local t = require('luatest')
 local treegen = require('luatest.treegen')
-local justrun = require('test.justrun')
+local justrun = require('luatest.justrun')
 
 local g = t.group()
 
diff --git a/test/app-luatest/override_panic_test.lua b/test/app-luatest/override_panic_test.lua
index a0d693c96ce179e13e62cc6eda3520f17886b424..c0346e30fcd803d8ce8cef9c8a8175c73f66e57e 100644
--- a/test/app-luatest/override_panic_test.lua
+++ b/test/app-luatest/override_panic_test.lua
@@ -1,6 +1,6 @@
 local t = require('luatest')
 local treegen = require('luatest.treegen')
-local justrun = require('test.justrun')
+local justrun = require('luatest.justrun')
 
 local g = t.group()
 
diff --git a/test/app-luatest/override_test.lua b/test/app-luatest/override_test.lua
index 71cf6257415722b13492096071d374f86d173f09..b1fb0d9d2c59a496853532fd7a4ef1ac83182ce2 100644
--- a/test/app-luatest/override_test.lua
+++ b/test/app-luatest/override_test.lua
@@ -1,6 +1,6 @@
 local t = require('luatest')
 local treegen = require('luatest.treegen')
-local justrun = require('test.justrun')
+local justrun = require('luatest.justrun')
 
 local g = t.group()
 
diff --git a/test/app-luatest/preload_test.lua b/test/app-luatest/preload_test.lua
index 522c979ae36b37823ae82b5b0657bbaad28285b5..d9546bb50ffa7f07297e35f6343042f18e62c602 100644
--- a/test/app-luatest/preload_test.lua
+++ b/test/app-luatest/preload_test.lua
@@ -1,7 +1,7 @@
 local fio = require('fio')
 local t = require('luatest')
 local treegen = require('luatest.treegen')
-local justrun = require('test.justrun')
+local justrun = require('luatest.justrun')
 
 local g = t.group()
 
diff --git a/test/box-luatest/box_cfg_env_test.lua b/test/box-luatest/box_cfg_env_test.lua
index 4d1ee116c7ee414dbf7d1a4c42c031f8adb16b80..6bd3264b5ec41c435b94e2a938c157c39387eb04 100644
--- a/test/box-luatest/box_cfg_env_test.lua
+++ b/test/box-luatest/box_cfg_env_test.lua
@@ -2,7 +2,7 @@ local fun = require('fun')
 local json = require('json')
 local t = require('luatest')
 local treegen = require('luatest.treegen')
-local justrun = require('test.justrun')
+local justrun = require('luatest.justrun')
 
 local g = t.group()
 
diff --git a/test/justrun.lua b/test/justrun.lua
deleted file mode 100644
index 953b53fefe90a9d96a81a571dee9e26f255c4fe2..0000000000000000000000000000000000000000
--- a/test/justrun.lua
+++ /dev/null
@@ -1,152 +0,0 @@
-local fun = require('fun')
-local log = require('log')
-local json = require('json')
-local fiber = require('fiber')
-local popen = require('popen')
-
-local justrun = {}
-
-local function collect_stderr(ph)
-    local f = fiber.new(function()
-        local fiber_name = "child's stderr collector"
-        fiber.name(fiber_name, {truncate = true})
-
-        local chunks = {}
-
-        while true do
-            local chunk, err = ph:read({stderr = true})
-            if chunk == nil then
-                log.warn(('%s: got error, exiting: %s'):format(
-                    fiber_name, tostring(err)))
-                break
-            end
-            if chunk == '' then
-                log.info(('%s: got EOF, exiting'):format(fiber_name))
-                break
-            end
-            table.insert(chunks, chunk)
-        end
-
-        -- Glue all chunks, strip trailing newline.
-        return table.concat(chunks):rstrip()
-    end)
-    f:set_joinable(true)
-    return f
-end
-
-local function cancel_stderr_fiber(stderr_fiber)
-    if stderr_fiber == nil then
-        return
-    end
-    stderr_fiber:cancel()
-end
-
-local function join_stderr_fiber(stderr_fiber)
-    if stderr_fiber == nil then
-        return
-    end
-    return select(2, assert(stderr_fiber:join()))
-end
-
--- Run tarantool in given directory with given environment and
--- command line arguments and catch its output.
---
--- Expects JSON lines as the output and parses it into an array
--- (it can be disabled using `nojson` option).
---
--- Options:
---
--- - nojson (boolean, default: false)
---
---   Don't attempt to decode stdout as a stream of JSON lines,
---   return as is.
---
--- - stderr (boolean, default: false)
---
---   Collect stderr and place it into the `stderr` field of the
---   return value
---
--- - quote_args (boolean, default: false)
---
---   Quote CLI arguments before concatenating them into a shell
---   command.
-function justrun.tarantool(dir, env, args, opts)
-    assert(type(dir) == 'string')
-    assert(type(env) == 'table')
-    assert(type(args) == 'table')
-    local opts = opts or {}
-    assert(type(opts) == 'table')
-
-    -- Prevent system/user inputrc configuration file from
-    -- influencing testing code.
-    env['INPUTRC'] = '/dev/null'
-
-    local tarantool_exe = arg[-1]
-    -- Use popen.shell() instead of popen.new() due to lack of
-    -- cwd option in popen (gh-5633).
-    local env_str = table.concat(fun.iter(env):map(function(k, v)
-        return ('%s=%q'):format(k, v)
-    end):totable(), ' ')
-    local args_str = table.concat(fun.iter(args):map(function(v)
-        return opts.quote_args and ('%q'):format(v) or v
-    end):totable(), ' ')
-    local command = ('cd %s && %s %s %s'):format(dir, env_str, tarantool_exe,
-                                                 args_str)
-    log.info(('Running a command: %s'):format(command))
-    local mode = opts.stderr and 'rR' or 'r'
-    local ph = popen.shell(command, mode)
-
-    local stderr_fiber
-    if opts.stderr then
-        stderr_fiber = collect_stderr(ph)
-    end
-
-    -- Read everything until EOF.
-    local chunks = {}
-    while true do
-        local chunk, err = ph:read()
-        if chunk == nil then
-            cancel_stderr_fiber(stderr_fiber)
-            ph:close()
-            error(err)
-        end
-        if chunk == '' then -- EOF
-            break
-        end
-        table.insert(chunks, chunk)
-    end
-
-    local exit_code = ph:wait().exit_code
-    local stderr = join_stderr_fiber(stderr_fiber)
-    ph:close()
-
-    -- If an error occurs, discard the output and return only the
-    -- exit code. However, return stderr.
-    if exit_code ~= 0 then
-        return {
-            exit_code = exit_code,
-            stderr = stderr,
-        }
-    end
-
-    -- Glue all chunks, strip trailing newline.
-    local res = table.concat(chunks):rstrip()
-    log.info(('Command output:\n%s'):format(res))
-
-    -- Decode JSON object per line into array of tables (if
-    -- `nojson` option is not passed).
-    local decoded
-    if opts.nojson then
-        decoded = res
-    else
-        decoded = fun.iter(res:split('\n')):map(json.decode):totable()
-    end
-
-    return {
-        exit_code = exit_code,
-        stdout = decoded,
-        stderr = stderr,
-    }
-end
-
-return justrun